具有struct的分段错误分配内存

时间:2019-01-09 18:29:56

标签: c struct segmentation-fault malloc calloc

我使用分配内存和指针还很新,

我的想法是尝试在结构内部创建结构以便在代码中使用它们,但是到目前为止,我获得了我无法管理的分段错误。 谢谢您的帮助

#include <stdio.h>
#include <stdlib.h>

int main()

{

int nb;
double i8,i9,i10;

struct vect3d1
{
        double *x,*y,*z;
};

struct block
{
        int ibl;
        int i,j,k;
        struct vect3d1 *mesh;

};


struct block *blocks;

i8=8.0;


nb=2;
blocks=(struct block *)malloc(nb*sizeof(struct block));

for(int i=0;i<nb;i++){

blocks[i].ibl=i;
blocks[i].mesh->x = calloc(1,sizeof(double));
blocks[i].mesh->x = &i8;

} }

1 个答案:

答案 0 :(得分:1)

段错误的原因是因为您取消引用未初始化的指针blocks[i].meshmesh成员中的地址是未知的,因为malloc返回未初始化的内存(mesh是从使用malloc的{​​{1}}分配的内存中得到的值)并取消引用指针是未定义的行为。

引用C11,第7.22.3.5节,malloc函数:

  

malloc函数为大小为的对象分配空间   由大小指定并且其值不确定。

引用C11,附件§J.2,未定义的行为:

  

使用了malloc函数分配的对象的值