2012-05-31 7 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] s. Также избавился от двойных проверок для 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; 
} 
Смежные вопросы