我正在尝试动态创建一个结构数组。虽然小尺寸的程序似乎运行良好,但程序后来崩溃了(分段错误)。当有一个很大的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);你知道发生了什么吗?框架内部有3个整型数
发布于 2017-01-14 00:33:07
看看*ipt的类型,它是frame *,这意味着它是指向frame类型的指针,即指向frame类型的指针。因此,您需要分配能够容纳类型frame的内存,并将地址分配给*ipt。
更改内存分配以反映相同的情况。变化
*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 (为了避免不想要的效果)。
发布于 2017-01-14 01:13:52
在create_ipt中,您可以使用:
访问**ipt的ipt (指向您在main中创建的指针的指针)
访问*ipt的*ipt (指向结构框架的指针)
访问ipt的**ipt (结构框架本身)
int create_ipt(int ipt_size, frame **ipt)
{
int i;
*ipt = malloc(ipt_size*sizeof(frame*)); // *ipt is the pointer to the struct frame you want to allocate memory)
for(i=0; i < ipt_size; i++)
{
// If you only have integers you don't need to allocate memory to the struct, it's already allocated, but if you have char* you should malloc that var
(*ipt)[i].text = malloc(text_size*sizeof(char));
(*ipt)[i].empty = 1;
}
return 0;
}https://stackoverflow.com/questions/41639214
复制相似问题