1. ホーム
  2. c

[解決済み] CRT detected that application wrote to memory after end of heap buffer "とはどういう意味ですか?

2022-02-11 03:15:18

質問

このコードで困っています。free(q->izv)関数のところで壊れてしまい、デバッグエラーが出てしまいます。

CRT detected that the application wrote to memory after end of heap buffer

この意味が全くわからないので、何か手助けがあればありがたいのですが。

    typedef struct izvodjaci{
        char *izv;
        int broj;
        struct izvodjaci *sled;
    }IZV;

    obrisi_i(IZV *p){
        while (p){
            IZV *q;
            q = p;
            p = p->sled;
            if (!strcmp(q->izv,"UNKNOWN")) free(q->izv);
            free(q);
        }
    }

ありがとうございました。

どのように解決するのですか?

<ブロッククオート

CRT detected that the application wrote to memory after end of heap buffer "とはどういう意味ですか?

ヒープバッファを確保したとします。

char* buffer = malloc(5);

OKです。 buffer はヒープ上の5つの文字を指すようになりました。

そのバッファに6文字を書き込んだとします。

buffer[0] = 'a';
buffer[1] = 'b';
buffer[2] = 'c';
buffer[3] = 'd';
buffer[4] = 'e';
buffer[5] = '\0';

あなたは今、ヒープを破損しました。あなたは5文字しか書くことが許されなかったのに、6文字も書いてしまったのです。

を行うことが許されるようになりました。 何であれ . 正常に動作することも、クラッシュすることも、すべてのパスワードを中国のハッカーに送信することも可能です。 何でも .

あなたの実装はどうやら最良の選択をしたようで、それは "ミスをしたことを知らせる" です。あなたは とてもとても幸せ というのは、恐ろしい選択肢のどれでもなく、このようなことが起こったからです。しかし、残念なことに、それはあなたにこう伝えます。 バッファが解放されたとき でなく ミスをしたとき しかし、エラーが出たことを喜んでください。