我正在尝试动态创建一个结构数组。虽然小尺寸似乎工作正常但程序稍后崩溃(段错误)。当有一个很大的 ipt_size 时,它会很快用无意义的数字压碎,所以我认为问题出在我分配数组的方式上。
int create_ipt(int ipt_size,frame **ipt){
int i;
*ipt=malloc(ipt_size*sizeof(frame*));
for(i=0;i<ipt_size;i++){
ipt[i]=malloc(sizeof(frame));
if (ipt[i]==NULL) return 1; //error
ipt[i]->empty=1;
}
return 0; //success
}//create page table
我调用这个函数
frame *ipt;
create_ipt(ipt_size,&ipt);
你知道发生了什么吗? frame 内部有 3 个整数
最佳答案
看*ipt
的类型,是frame *
,也就是说,它是一个指向类型frame
的指针,即点到类型 frame
。所以你需要分配能够容纳类型frame
的内存并将地址分配给*ipt
。
更改内存分配以反射(reflect)相同。改变
*ipt=malloc(ipt_size*sizeof(frame*));
到
*ipt=malloc(ipt_size*sizeof(frame));
然后,查看并修改(删除)下面的语句ipt[i]=malloc(sizeof(frame));
,你已经分配了内存来存放ipt_size
元素个数。
之后,查看解引用语句。而不是
ipt[i]->empty=1;
你需要写
(*ipt)[i].empty = 1;
并且因为(避免不需要的效果)operator precedence 而有显式括号.
关于c - 使用 malloc 动态分配结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41639214/