C++ 追加节点双链表
我正在尝试将节点附加到新列表中。程序在while循环中崩溃C++ 追加节点双链表,c++,insert,append,doubly-linked-list,C++,Insert,Append,Doubly Linked List,我正在尝试将节点附加到新列表中。程序在while循环中崩溃 void DLL:append(string ss, string name, int & count){ Node *temp; Node *newNode = new Node(); newNode->ssn = ss; newNode->name = name; newNode->next = NULL; newNode->prev = NULL; temp = head
void DLL:append(string ss, string name, int & count){
Node *temp;
Node *newNode = new Node();
newNode->ssn = ss;
newNode->name = name;
newNode->next = NULL;
newNode->prev = NULL;
temp = headPtr;
if(headPtr == NULL){
headPtr = newNode;
count++;
}else{
while(temp->next != NULL){
temp = temp->next;
}
newNode->prev = temp;
newNode->next = NULL;
temp->next = newNode;
count++;
}
}
}
我还尝试使用这个而不是那个while循环,但结果相同:
while(temp != NULL){
...
temp = temp->next
}
任何帮助都将不胜感激
编辑:将上面的第二个案例更改为
while(temp->next != NULL){
...
temp = temp->next;
}
它完成了整个过程,然后显示了其他语言的字符,以及符号等,然后是我的界面上的每个文件夹,直到它最终崩溃:c您当前循环直到
temp
为空。当它到达此计算时,您可以通过执行temp->next
来解除对它的引用。这就是UB,这就是导致程序崩溃的原因
将while循环更改如下,以便在最后一个元素(即下一个元素为NULL)时停止:
请注意,由于您的if子句,temp
在循环开始时不存在为NULL的风险
<>无关的注释:我建议你在编写C++代码时使用Null pTR而不是NULL的习惯。我不是C++的专家,但是你在while语句中的行中缺少分号(“TEMP= TEMP-> Next”)。我是,谢谢!我重新键入了它,我的真实代码中有分号谢谢一堆,我会尝试一下!我有nullptr,但我的编译器给了我一个错误…我刚刚检查了我的代码,我实际上有你说的,它似乎不起作用…追加仍然崩溃吗?Node::name定义为std::string吗?请注意,你还计算了++一太多:如果您使用将达到的元素数在循环中显示所有内容,并显示空指针。请在问题中输入所有相关代码,因为我们无法猜测可能出错的所有内容。我尝试过的每个方法(上面列出的,包括您的)都确实会崩溃。
while(temp->next != NULL){
temp = temp->next
}