Segmentation fault(core dumped) in C

Есть две струкртуры A и B. В структуре B экземпляр структуры A и указатель на неё. Пытаюсь присвоить значение полю 'a' в структуре A двум способами. C первым все ок, а вот второй почему то ошибку выдает. Не понимаю, что не так.

struct A{int a; double x;};
struct B{A a; A *pa;}x[2];

x[0].a.a = 15;
x[1].pa->a = 14;

cout << x[0].a.a;
cout << x[1].pa->a; 

Ответы (1 шт):

Автор решения: Harry

Ну смотрите...

struct A{int a; double x;};
struct B{A a; A *pa;}x[2];

Что в этот момент в x[1].pa? неизвестно. Какой-то мусор. Т.е. pa указывает на какое-то место в памяти, куда, скорее всего, никакого доступа нет. А вы туда запихиваете значение:

x[1].pa->a = 14;

Туда, куда нельзя - потому что неизвестно куда. Т.е. UB. Вот и все...

Я еще понимаю

x[1].pa = new A;
x[1].pa->a = 14;

Тогда вы выделили память, куда можно писать... Правда, надо потом не забыть ее освободить :)

→ Ссылка