分段析构函数中的超出范围故障

Segmentation out-of-range fault in destructor

本文关键字:范围 故障 析构函数 分段      更新时间:2023-10-16

我的析构函数中有一个分段错误,但我不太确定为什么。该代码用于键/值对的映射,这些键/值对存储在 Node 数组中并链接以避免冲突。

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){

如果需要,可以提供任何其他代码。 提前感谢您的帮助。 :)

我通过删除重复的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;
}