我正在爲我的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。使用調試器瀏覽代碼,並在給出正確的值之前查看正在使用哪些內容。 –