指向结构中的指针的calloc()不';不要在叮当声中工作 我在C中实现了一个队列。考虑下面的代码: #包括 #包括 typedef结构队列; 结构队列{ 内伦; int头; 内尾; int*数组; }; int main(int argc,char*argv[argc+1]){ int len=12; 队列*q=malloc(sizeof(q)); *q=(队列){ .array=calloc(len,sizeof(int)), .len=len, }; 对于(int i=0;iarray[i]); } 自由(q->数组); 免费(q); 返回退出成功; }
我使用calloc()初始化结构中的数组,但数组的某些值不是零指向结构中的指针的calloc()不';不要在叮当声中工作 我在C中实现了一个队列。考虑下面的代码: #包括 #包括 typedef结构队列; 结构队列{ 内伦; int头; 内尾; int*数组; }; int main(int argc,char*argv[argc+1]){ int len=12; 队列*q=malloc(sizeof(q)); *q=(队列){ .array=calloc(len,sizeof(int)), .len=len, }; 对于(int i=0;iarray[i]); } 自由(q->数组); 免费(q); 返回退出成功; },c,malloc,clang,calloc,C,Malloc,Clang,Calloc,我使用calloc()初始化结构中的数组,但数组的某些值不是零 $clang-Wall-O0-g-o queue.o queue.c&&./queue.o 952118112 32728 0 0 0 0 0 0 0 0 0 0 这是为什么?这是内存分配 queue* q = malloc(sizeof(q)); 这是错误的。它只为指针而不是队列类型的对象分配内存 改写 queue* q = malloc(sizeof(*q)); 您需要sizeof*q,而不是sizeof q。第一个生成对
$clang-Wall-O0-g-o queue.o queue.c&&./queue.o
952118112
32728
0
0
0
0
0
0
0
0
0
0
这是为什么?这是内存分配
queue* q = malloc(sizeof(q));
这是错误的。它只为指针而不是队列类型的对象分配内存
改写
queue* q = malloc(sizeof(*q));
您需要
sizeof*q
,而不是sizeof q
。第一个生成对象的大小,第二个生成指针的大小。看见