【发布时间】:2024-01-15 01:01:02
【问题描述】:
我的 C 代码有问题:
#include<stdlib.h>
#include<stdio.h>
int main()
{
int i1,j1,k1;
int n_block;
struct block
{
int i,j,k;
} *blocks;
n_block=3;
i1=4;
k1=3;
j1=2;
blocks=malloc(n_block*sizeof(blocks));
for(int count=0;count<=n_block-1;count++){
printf("count %d\n",count);
blocks[count].i=i1;
blocks[count].j=j1;
blocks[count].k=k1;
printf("results:%d\n",blocks[count].i);
printf("results:%d\n",blocks[count].j);
printf("results:%d\n",blocks[count].k);
}
}
预期的输出是:
count 0
results:4
results:2
results:3
count 1
results:4
results:2
results:3
count 2
results:4
results:2
results:3
但我得到:
count 0
results:4
results:2
results:3
count 1
results:4
results:2
results:3
count 2
results:4
results:2
results:1970496882
我假设最后的结果是指针的值,但是为什么会这样呢?
我尝试修改for循环(不修改n_block):
for(int count=0;count<=n_block+1;count++)
我得到:
count 0
results:4
results:2
results:3
count 1
results:4
results:2
results:3
count 2
results:4
results:2
results:1970496882
count 3
results:4
results:2612
results:10
count 4
results:4
results:2
results:3
所以,问题是,为什么会这样?
谢谢
【问题讨论】:
-
sizeof(blocks)是指针的大小。你确定这就是你想要的吗?看起来不像。试试blocks=malloc(n_block * sizeof *blocks);? -
sizeof(struct block)和count < n_block -
没问题,但是
for(int count=0;count<=n_block-1;count++)通常写成for (int count = 0; count < n_block; count++) -
Your code as is 给出了一些奇怪的输出。 A version with the correct
sizeof给出了预期的输出。 -
@pmg 是的,我认为问题出在 u_ 的回答中建议的 sizeof(block) 上
标签: c for-loop struct printf malloc