C语言 使用 malloc 动态分配结构数组



>我正在尝试动态创建一个结构数组。虽然小尺寸似乎工作正常,但程序稍后会崩溃(分段错误)。当有一个大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 个整数

*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;

并且该显式括号的存在是因为(以避免不必要的影响)运算符优先级。

create_ipt 中,您使用:

ipt访问 **ipt(指向您在主中创建的指针的指针)

*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;
}

最新更新