首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用malloc动态分配结构数组

使用malloc动态分配结构数组
EN

Stack Overflow用户
提问于 2017-01-14 00:28:05
回答 2查看 622关注 0票数 0

我正在尝试动态创建一个结构数组。虽然小尺寸的程序似乎运行良好,但程序后来崩溃了(分段错误)。当有一个很大的ipt_size时,它对无意义数字的崩溃速度非常快,所以我假设问题出在我分配数组的方式上。

代码语言:javascript
复制
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

我用下面的方法调用函数

代码语言:javascript
复制
     frame *ipt;
    create_ipt(ipt_size,&ipt);

你知道发生了什么吗?框架内部有3个整型数

EN

回答 2

Stack Overflow用户

发布于 2017-01-14 00:33:07

看看*ipt的类型,它是frame *,这意味着它是指向frame类型的指针,即指向frame类型的指针。因此,您需要分配能够容纳类型frame的内存,并将地址分配给*ipt

更改内存分配以反映相同的情况。变化

代码语言:javascript
复制
 *ipt=malloc(ipt_size*sizeof(frame*));

代码语言:javascript
复制
*ipt=malloc(ipt_size*sizeof(frame));

然后,看一看并修改(删除)下面的语句ipt[i]=malloc(sizeof(frame));,您已经为保存ipt_size数量的元素分配了内存。

在此之后,请看取消引用语句。而不是

代码语言:javascript
复制
ipt[i]->empty=1;

你需要写下

代码语言:javascript
复制
(*ipt)[i].empty = 1;

显式的圆括号存在是因为operator precedence (为了避免不想要的效果)。

票数 2
EN

Stack Overflow用户

发布于 2017-01-14 01:13:52

create_ipt中,您可以使用:

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

访问*ipt的*ipt (指向结构框架的指针)

访问ipt的**ipt (结构框架本身)

代码语言:javascript
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41639214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档