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调试时,它告诉我添加到树的第二个节点指向自身,从而导致无限循环。我的问题是,怎么样?也许我现在睡不着觉得工作,但我看不出有什么不对。
答案 0 :(得分:0)
尽管函数编写得不是很好,但在函数列表中添加节点没有问题。
似乎问题是在向列表添加新节点时使用指向同一对象(可能是本地对象)的指针。您必须动态分配每个新节点。
我猜你的代码看起来像
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 );
//..
}
即添加到列表中的每个新节点都必须使用malloc
进行分配,或者至少必须将函数指针传递给单独的对象。