我目前正在制作一个程序,而且我遇到了一个小问题。它从文本文件中读取数据,当数字按升序排列时,运行正常,但当我按随机顺序排列数字时,它会崩溃。我已经调试了它并将其追溯到这个if语句,但我无法弄清楚我做错了什么。
if(tempNode != NULL)
{
struct doublyLinkNode* temp = new doublyLinkNode;
temp->nextNode = tempNode;
temp->previousNode = tempNode->previousNode;
temp->nodeValue = noToInsert;
tempNode->previousNode->nextNode = temp;
tempNode->previousNode= temp;
list->count++;
return true;
} // end if
当要添加的新号码在列表的当前顶部之前时,列表构建崩溃。我认为指针试图写入无效指针。
答案 0 :(得分:1)
您的错误是预料之中的。您希望在当前节点之前插入节点(tempNode
),
并且您在代码中使用tempNode->previousNode
如果tempNode
恰好是第一个节点,那么tempNode->previousNode
是什么?对,NULL
(除非你有一个循环列表,但你不会有这个问题)。这意味着
tempNode->previousNode->nextNode = temp;
会崩溃。
作为此部分的解决方案,只需制作if
:
if(tempNode->previousNode != NULL) tempNode->previousNode->nextNode = temp;
(假设所有内容都已正确初始化)。根据您实现列表的方式,您可能还需要更改第一个节点的信息。