2012-05-31 77 views
0

我的析構函數中存在分段錯誤,但我不太清楚爲什麼。代碼用於存儲在節點數組中的鍵/值對映射,並鏈接以避免衝突。析構函數中的分段超出範圍的故障

template<class V> 
map<string, V>::~map() 
{ 
    for(unsigned int i = 0; i < SIZE; i++){ 
     if(hashArray[i] != NULL){ 
      Node* tmpNode = hashArray[i]; 
      Node* currentNode = hashArray[i]; 
      while(currentNode->next != NULL){ 
       currentNode = currentNode->next; 
       delete tmpNode; 
       tmpNode = currentNode; 
      } 
      delete tmpNode; 
     } 
    } 

    delete [] hashArray; 
} 

調試器指向這條線但我確信我不會超出範圍。

while(currentNode->next != NULL){ 

如果需要,可以提供任何其他代碼。預先感謝您的幫助。 :)

+4

停止刪除你不分配新的東西。 – chris

+0

它在構造函數中都是用new來分配的嗎? –

+0

hashArray = new Node * [SIZE]; //對於數組 –

回答

1

我通過擺脫重複hashArray[i] s清理了一下。也擺脫了空重複檢查:

template<class V> 
map<string, V>::~map() 
{ 
    for(unsigned int i = 0; i < SIZE; i++) { 
     Node* currentNode = hashArray[i]; 
     while(currentNode) { 
      Node* next = currentNode->next; 
      delete currentNode; 
      currentNode = next; 
     } 
    } 

    delete [] hashArray; 
}