Ошибка сегментации, выделяющая память со структурой структуры - PullRequest
0 голосов
/ 09 января 2019

Я новичок в использовании ресурсов памяти и указателей,

Моя идея состоит в том, чтобы попытаться создать структуру внутри структуры, чтобы использовать их после в коде, однако теперь я получил ошибку ошибки сегментации, которой я не могу управлять. Спасибо за любую помощь

#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 голосов
/ 09 января 2019

Причиной ошибки seg является разыменование неинициализированного указателя blocks[i].mesh. Адрес в элементе mesh неизвестен, так как malloc возвращает неинициализированную память (mesh получил свое значение из памяти, выделенной с использованием malloc из block), и разыменование такого указателя является неопределенным поведением.

Цитата C11, глава §7.22.3.5, функция malloc:

Функция malloc выделяет пространство для объекта, размер которого определяется размером и значение которого не определено.

Цитата C11, приложение §J.2, Неопределенное поведение:

Используется значение объекта, выделенного функцией malloc

...