2012-05-31 6 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

생성자에서 모두 새 것으로 할당 되었습니까? –

+0

hashArray = 새 노드 * [SIZE]; // 배열의 경우 –

답변

1

나는 hashArray[i]을 없애서 조금 청소했다. 또한 null에 대한 중복 검사를 없앴습니다.

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; 
}