2012-01-06 76 views
1

这是节点定义:为什么在我自己的实现BST树的不malloc的工作

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或其他错误(在windows上写入)时,会导致分段错误。为什么?

+3

错误在'...'中。另外,不要强制使用'malloc()'的结果。也可以使用调试器。 – 2012-01-06 06:55:46

+0

左边,右边可以理解..但是p是什么? – 2012-01-06 06:57:20

+0

好吧,这段代码是正确的,但我试图用printf调试它,fflush并指出malloc,我正在dev-C++下编写。但是,可以将我的大部分代码放入.h文件(坏习惯)的原因是什么? – user1133781 2012-01-06 07:00:10

回答

0

使用valgrind(如果您的系统是Linux)或调试器来调试您的问题。

学习使用调试器(例如,Linux上的gdb)。

1

我怀疑,在...内,你有一个分配给(或从x->leftx->rightx->right),以便于将新分配的节点链接到树中。如果root为NULL,则应该失败。