2017-04-04 108 views
0

我正在處理一個2d鏈表,每個鏈表都指向右邊和底部,每次我的程序崩潰都說 異常拋出:讀取訪問衝突。 a是0xCDCDCDCD。 第4行引發異常,其中b = a-> next。2d鏈接列表析構函數

LinkedList::~LinkedList() 
{ 
nodePtr a = head; 
nodePtr b = a->next; 
nodePtr c = down; 
nodePtr d = c->bottom; 

while (a != NULL) 
{ 
    nodePtr temp = a->next; 
    nodePtr temp1 = c->bottom; 
    delete a; 
    delete c; 
    a = temp; 
    c = temp; 
} 

}

+0

您正在檢查'a'不是null,'c'怎麼辦?另外,在哪一行是拋出的異常? – AlexG

+0

你忘了初始化一些東西。 – molbdnilo

+0

值0xcdcdcdcd通常由Visual Studio及其調試器用於標記未初始化的全局內存(請參閱[此MSDN參考](https://msdn.microsoft.com/zh-cn/library/aa260966(v = vs 0.60)的.aspx))。這意味着如果你有一個具有該值的變量,你沒有正確地初始化它。你是否缺少在構造函數中設置指向'nullptr'的指針? –

回答

0

即使假定該代碼工作正常(這意味着,一些項目甚至):

while (a != NULL) 
{ 
    nodePtr temp = a->next; 
    nodePtr temp1 = c->bottom; 
    delete a; 
    delete c; 
    a = temp; 
    c = temp1; // fixed definitely incorrect assignment 
} 

你有一個未定義的行爲時ac指針都滿足你開始刪除已被刪除的節點。所以,正確的方法恕我直言是刪除節點只在一個方向(我會選擇正向)。