0

デストラクタにセグメンテーション違反がありますが、その理由がよくわかりません。このコードは、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){

必要に応じて、他のコードを提供できます。よろしくお願いします。:)

4

1 に答える 1

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