Почему malloc не работает в моей собственной реализации дерева BST

Это определение узла:

typedef struct drzewo BST;
struct drzewo  {
   int key;
   BST *left;
   BST *right;
   BST *p;
};

и я пытаюсь написать функцию добавления:

BST *add(  BST *root, int val)
{
   BST  *x = root;
   BST *nowe =(BST*)malloc(sizeof(BST));


   nowe->key = val;
   nowe->left=nowe->right=nowe->p=NULL;
   ...
}

но похоже, что malloc приводит к ошибке сегментации, когда root = NULL, или другой ошибке (запись в окнах). Почему это так?


person Community    schedule 06.01.2012    source источник
comment
Ошибка в .... Кроме того, не применяйте результат malloc(). Кроме того, используйте отладчик.   -  person Kerrek SB    schedule 06.01.2012
comment
влево, вправо понятно.. но для чего р?   -  person Shamim Hafiz    schedule 06.01.2012
comment
Хорошо, этот код правильный, но я пытался отладить его с помощью printf, fflush, и он указал на malloc, я пишу под dev-c++. Но может быть причиной того, что я помещаю большую часть кода в файлы .h (плохая практика)?   -  person    schedule 06.01.2012
comment
Если ошибка возникает только тогда, когда root==null, то, скорее всего, ошибка возникает в любом коде после ..., который обращается к x -- не могли бы вы добавить больше кода?   -  person Soren    schedule 06.01.2012


Ответы (2)


Я подозреваю, что в ... у вас есть назначение (или чтение) x->left или x->right, чтобы облегчить связывание вашего недавно выделенного узла с деревом. Если root имеет значение NULL, это должно завершиться ошибкой.

person Vatine    schedule 06.01.2012

Используйте valgrind (если ваша система Linux) или отладчик для устранения неполадок.

Научитесь использовать отладчик (например, gdb в Linux).

person Basile Starynkevitch    schedule 06.01.2012