2012-04-26 9 views

答えて

9
pear = new char[1024]; 

1024文字分のメモリがヒープから割り当てられ、pearが開始点を指します。

pear = "happy go lucky"; 

pearは現在読み取り専用セグメント内に存在し、以前に割り当てられたメモリが漏洩されるリテラル文字列を指します。

delete [] pear; 

実行時例外として明示された未定義の動作である読み取り専用文字列を解放しようとしました。

+0

AH!そうです...ありがとう。 – Jake

5

梨= "ハッピーラッキー行きます"。この

new char[]によって割り当てられたポインタを置き換えます。だからあなたのdelete[] pearは静的に割り当てられた文字列を解放しようとします。

これは悪いです。 newで割り当てるものはdeleteのみです。そしてそのポインタを上書きした(そして失った)ので、deleteすることはできません。

+0

あなたが最初だったので – Jake

2

ヒープ上に割り当てられた文字配列にpearを割り当てて、それを静的な場所にある文字列を指すように再割り当てします。それを削除しようとすると、その静的な場所にあるものを削除するはずがないので、エラーになります。

関連する問題