2012-05-31 41 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; 
}