我正在为我的C++类写一个双向链表,并且在插入函数时遇到了问题。这个想法是将一个值插入到正确位置的一个排序列表中(即在一个较低的数字之后,一个更高的数字之前)。该函数的作用在于它将数字插入到正确的点中,但是当我尝试分配指针以考虑新节点时,我遇到了seg错误。具体线路为:在C++双链表插入函数中获取seg错误
nodePtr->previous = newNode;
我使用相同的语法来分配从NODEPTR指针在没有问题的其他景点,所以我不明白为什么赛格故障在这里。
在此先感谢您的帮助。
编辑:它似乎已经试图访问先前的指针nodePtr已被设置为nullptr后的问题。一个if语句检查之前,手处理案件。
从.H:
struct ListNode {
double value;
struct ListNode *next;
struct ListNode *previous;
};
ListNode *head;
从在.cpp:
void NumberList::insertNode(double num)
{
ListNode *newNode;
ListNode *nodePtr;
ListNode *previousNode;
newNode = new ListNode;
newNode->value = num;
if(!head)
{
head = newNode;
newNode->next = nullptr;
}
else
{
nodePtr = head;
previousNode = nullptr;
while (nodePtr != nullptr && nodePtr->value < num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
if (nodePtr != nullptr)
nodePtr->previous = previousNode;
}
if (previousNode == nullptr)
{
head = newNode;
newNode->next = nodePtr;
}
else
{
nodePtr->previous = newNode;/*This is the line that seg faults.*/
previousNode->next = newNode;
newNode->next = nodePtr;
newNode->previous = previousNode;
}
}
}
没有哪我看你初始化任何指针:他们不默认为NULL开始,也不会指向可重用的对象默认情况下。 –
我试图初始化nodePtr->之前的nullptr,但seg故障仍然发生,所以我删除它。 –
关于其他指针的帽子? 'head','next','previous'和'nodePtr'?所有这些应该被初始化为nullptr。使用调试器浏览代码,并在给出正确的值之前查看正在使用哪些内容。 –