c - 使用 malloc 动态分配结构数组

标签 c arrays pointers struct dereference

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

相关文章:

java - 在正方形或矩形矩阵上添加对角线的算法,从右开始

javascript - 如何使用 Javascript/Jquery 解析多级 json

java - 我的国际象棋程序的线程 "main"java.lang.NullPointerException 中出现异常

mysql c api mysql 查询功能不起作用

c - 我如何知道行号何时更改?

javascript - 有没有办法在javascript中复制对象数组?

c++ - 从 C++ 函数返回对象的正确方法是什么?

c - 为什么矩阵不能用 5,3 而用 3,5?

c - 为什么 Ctrl-Z 不触发 EOF?

c - 操作内存时是否需要乘以sizeof(char)?