2015-01-19 4 views
1

Программа компилируется, но во время работы она печатает «asd12», затем «asd45», а затем «Ошибка сегментации (сбрасывание ядра)». Он не печатает 'asd67'. Может ли кто-нибудь помочь мне в этом?Ошибка сегментации в конструкторе

struct node{ 
     int a[3]; 
     int b; 
     int c; 
     node* parent; 
     node(){ 
      b=0; 
      parent=NULL; 
     } 
    }; 



    int main(){ 
      node* x; 
      node* y; 
      cout << "asd12"<< endl; 
      x->a[0]=1;x->a[1]=1;x->a[2]=1; 
      cout << "asd45"<< endl; 
      y->a[0]=1;y->a[1]=1;y->a[2]=1; 
      cout << "asd67"<< endl; 
      return 0; 
     } 
+3

Какой компилятор разрешил вам даже скомпилировать это? – Sadique

+0

извините .. я скопировал это неправильно .. я обновил код int main(), и проблема не устранена. – Sam

+0

Вы не выделяете память для 'x' и' y'. Но все еще пытаетесь их использовать? – CinCout

ответ

2

Вы указали x и y как указатели на объекты узла struct, но вы не создали объекты.

Самым простым решением было бы изменить свои заявления от

node* x; 
node* y; 

к:

node x; 
node y; 

который создаст автоматический узел вары, и позволит вам получить доступ к элементам массива следующим образом:

x.a[0] = 1; 

Вы также можете создать динамические вары, используя

node* x = new node; 
node* y = new node; 
// access vars using pointer syntax 
x->a[0] = 1; 
// when finished with x and y, delete the created objects 
delete x; 
delete y; 
Смежные вопросы