1. ホーム
  2. c++

[解決済み] ヒープ破壊を検出しました。

2022-02-05 10:30:26

質問

このような"が出るのですが。 heap corruption detected このコードを実行した後、" メッセージが表示されます。

uli& uli::operator =(char* n)
{
    char* buffer = new char[strlen(n)];

    char* p;
    int op;
    int coef;

    strcpy(buffer, n);

    while(*buffer)
    {
        op = strlen(buffer) - 5;
        p = (op >= 0) ? op+buffer : buffer;
        coef = atoi(p);

        if(coef > 65535)
            coef = atoi(++p);

        push(head, coef);
        *p = '\0';
    }

    delete buffer;       //  <- heap corruption detected

    return *this;
}

このようにメソッドを呼び出しています。

uli x;
x = "9876123";

ヒープ破壊を検出したとはどういう意味ですか?

解決方法は?

一般に、ヒープ破壊とは、未割り当てのメモリに書き込みを行い、メモリ割り当てを行うためのデータ構造に損傷を与えたことを意味します。

もっと問題があるかもしれませんが、最初に目につくのはこの行です。

strcpy(buffer, n);

これは、次のように書きます。 strlen(n) + 1 バイトを buffer しかし buffer はあくまで strlen(n) バイトの長さ(余分なバイトは終端である \0 .) この余分なバイトを書き込むと、未定義の動作となり、ヒープが破壊される可能性があります。