C++リフレッシャーが必要です。なぜこれがメモリ例外を与えるのですか?
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
C++リフレッシャーが必要です。なぜこれがメモリ例外を与えるのですか?
pear = new char[1024];
pear = "happy go lucky";
delete [] pear; // exception
pear = new char[1024];
1024文字のメモリはヒープから割り当てられ、ヒープpearの先頭を指します。
pear = "happy go lucky";
pearこれで、読み取り専用セグメントにある文字列リテラルを指し、以前に割り当てられたメモリがリークされます。
delete [] pear;
読み取り専用文字列を解放しようとしました。これは、実行時例外として現れる未定義の動作です。
pear="ハッピーゴーラッキー";
これは、によって割り当てられたポインタを置き換えnew char[]ます。したがってdelete[] pear、静的に割り当てられた文字列を解放しようとします。
それは良くないね。deleteで割り当てたものだけを割り当てることができますnew。そして、あなたはそのポインタを上書きした(そして失った)ので、それはできませんdelete。
pearヒープ上に割り当てられたcharの配列に割り当ててから、静的な場所にある文字列を指すように再割り当てします。それを削除しようとすると、その静的な場所にあるものを削除することになっていないため、エラーが発生します。