void addToTree(SynTree *newNode){
if(tree==NULL){
tree=newNode;
newNode->next=NULL;
}else{
SynTree *curr=tree;
while(curr->next){
curr=curr->next;
}
curr->next=newNode;
newNode->next=NULL;
}
}
我在其他地方使用过的令人难以置信的基本 C 代码。它在 while 语句中陷入无限循环。当我使用 gdb 调试时,它告诉我添加到树中的第二个节点指向自身,从而导致无限循环。我的问题是,如何?也许我现在睡眠不足而无法工作,但我看不出出了什么问题。
尽管函数写得不是很好,但在函数中将节点添加到列表中没有问题。
似乎问题在于您在向列表中添加新节点时使用指向同一对象(可能是本地对象)的指针。您必须动态分配每个新节点。
我可以猜到你的代码看起来像
SynTree node;
while ( condition )
{
// set internal data members of the node
addToTree( &node );
//..
}
或
while ( condition )
{
SynTree node;
// set internal data members of the node
addToTree( &node );
//..
}
而不是这种不正确的方法,你必须写成
while ( condition )
{
SynTree *node = malloc( sizeof( SynTree ) );
// set internal data members of the node
addToTree( node );
//..
}
也就是说,添加到列表中的每个新节点都必须使用 using malloc
进行分配,或者至少您必须传递给函数指针以分隔对象。