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

1 回答 1

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;
}
于 2012-05-31T07:12:10.747 回答