2014-11-25 2 views
-1

Я пытаюсь создать телефонную книгу, которая представляет собой двоичное дерево поиска, которое имеет связанный список в конце каждого листа, но я столкнулся с «Ошибка сегментации (Ошибка ядра "). У меня такое чувство, что это вызвано моей функцией «makenode», которая создает первый узел дерева. Мои структуры являются следующиеИспользование «->» для навигации по структурам с помощью указателей

typedef struct number{ 
    char number [20]; 
    struct number *next; 
} Number; 

typedef struct list { 
    Number *first, *last; 
} List; 

typedef struct tree { 
    char name[20]; 
    struct tree * left; 
    struct tree * right; 
    List * next; 
} Tree; 

И моя функция makenode является

Tree *makenode (char name[20], Tree *l, Tree *r, Number e) { 
    Tree *newnode; 
    newnode = malloc(sizeof(Tree)); 
    strncpy(newnode->name,name,19); 
    newnode->next=malloc(sizeof(List)); 
    newnode->next->first=malloc(sizeof(Number)); 
    strncpy(newnode->next->first->number,e.number,11); 
    newnode->left = l; 
    newnode->right = r; 
return newnode; 
} 

Я просто надеялся, что за советом ли линии

strncpy(newnode->next->number,e.number,11); 

является линия вызывает проблему, и, возможно, некоторые советы о том, почему это вызывает проблему. Спасибо заранее.

+0

Почему вы не используете отладчик? Если вы это сделаете, вы остановитесь на строке, которая выдает исключение. Поэтому, пожалуйста, используйте инструменты, которые у вас уже есть! – Klaus

+0

Апология для новизны, но как я могу использовать отладчик? И он встроен в GCC? –

+0

yep, из-за нехватки памяти для 'newnode-> next' –

ответ

2

ошибка сегментации, потому что память не выделяется структурировать LIST

newmode->next = malloc(sizeof(LIST));