2014-10-15 3 views
-1

ниже - моя программа c дает мне ошибку сегментации, я не знаю почему. Дальнейший sizeof (struct node1 *) дает ответ 4, а sizeof (struct node1) дает 12. пожалуйста, объясните мне.ошибка сегментации в указателе структуры i c

#include<stdio.h> 
#include<malloc.h> 

struct node{ 
     int i; 
     int j; 
}; 

struct node1{ 
     int *a; 
     int *b; 
     struct node *n; 
}; 

int main() 
{ 
     struct node1 *nn; 
     nn=(struct node1 *)malloc(sizeof(struct node1)); 
     nn->n->i=5; 
     printf("\nsize is %d -- %p -- %p %d\n",sizeof (struct node1*),*nn,nn,nn->n->i); 

return 0; 
} 
+2

Вы не выделили 'NN-> n'. – juanchopanza

+0

после выделения Я получил ответ: размер 4 - (ноль) - (ноль) 138850328 !! –

+2

Да ... 'printf' не знает, как напечатать' struct ', но вы передаете его один и указав, что это указатель. Лучше прочитайте вступительную книгу C или попробуйте сначала несколько простых примеров. – juanchopanza

ответ

2

Вы segfault, потому что член 'n' структуры 'node1' не выделен. Используйте malloc на nn-> n после первого выделения.

struct node1 *nn; 

nn=(struct node1 *)malloc(sizeof(struct node1)); 
nn->n = malloc(sizeof(struct node)); 
//now nn->n is allocated you can set a value in nn->n->i 
nn->n->i=5; 

Не забудьте Бесплатный звонок перед "вернуть 0"

free(nn->n); 
free(nn); 
return 0; 
Смежные вопросы