C++リフレッシャーが必要です。なぜこれによってメモリ例外が発生するのですか?文字列が割り当てられたときにchar * newとdelete []エラーが発生する
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
C++リフレッシャーが必要です。なぜこれによってメモリ例外が発生するのですか?文字列が割り当てられたときにchar * newとdelete []エラーが発生する
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
1024文字分のメモリがヒープから割り当てられ、pear
が開始点を指します。
pear = "happy go lucky";
pear
は現在読み取り専用セグメント内に存在し、以前に割り当てられたメモリが漏洩されるリテラル文字列を指します。
delete [] pear;
実行時例外として明示された未定義の動作である読み取り専用文字列を解放しようとしました。
AH!そうです...ありがとう。 – Jake
梨= "ハッピーラッキー行きます"。この
はnew char[]
によって割り当てられたポインタを置き換えます。だからあなたのdelete[] pear
は静的に割り当てられた文字列を解放しようとします。
これは悪いです。 new
で割り当てるものはdelete
のみです。そしてそのポインタを上書きした(そして失った)ので、delete
することはできません。
あなたが最初だったので – Jake
ヒープ上に割り当てられた文字配列にpear
を割り当てて、それを静的な場所にある文字列を指すように再割り当てします。それを削除しようとすると、その静的な場所にあるものを削除するはずがないので、エラーになります。
は 'char * pear = new char [1024];'と等しい最初の行です。 –