- ベストアンサー
deleteで開放するとエラーになる原因がわからない
deleteでメモリ開放するとエラーになる原因がわからないです。 下記のようなプログラムを作ったのですが、deleteのところでエラーがでます。 エラー内容は 「Windows によって ****.exe でブレークポイントが発生しました。 ヒープが壊れていることが原因として考えられます。****.exe または読み込まれた DLL にバグがあります。 あるいは、****.exe がフォーカスを持っているときに、ユーザーが F12 キーを押したことが原因として考えられます。 可能であれば、出力ウィンドウに詳細な診断情報が表示されます。」 とでます。 ソースは wchar_t *aaa = L"ほげほげ"; wchar_t bbb[200]; wcscpy(bbb, aaa); delete aaa; wprintf(L"%s\n", bbb); getchar(); です。 どこに原因があるのでしょうか? [環境] WindowsXP+VisualC++2008 UNICODE使用
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
メモリを動的に取ったした時は、決まったやり方で解放します。 メモリを確保するにはC++では「new」、C言語では「new」が一般的です。 「new」で取ったメモリは「delete」で解放する、「malloc」は「free」を使う、というのも決まりです。(「new」で取ったメモリを「free」で解放するとエラーになります。「malloc」も同じ) サンプルのコードでは、「new」で取っていないメモリ領域に対して「delete」をかけてしまっているのがエラーの原因です。 コンパイルを通すだけなら「delete」の部分を削除すればよいかと思います。 「new」と「delete」はC++をやる限り理解しなければならない命令文です。ここの理解がいい加減だと、C++では地獄を見ます。 できれば「C++ new delete」で検索をかけて、詳細を調べることをお勧めします。
その他の回答 (4)
- aris-wiz
- ベストアンサー率38% (96/252)
>文字列定数をdeleteで解放 文字定数に限らず、newしていない領域に対して deleteしてはいけません。 この2つはセットだと思ってください。 >どこに原因があるのでしょうか? delete aaa;←ここ
- Oh-Orange
- ベストアンサー率63% (854/1345)
★アドバイス ・文字列定数をdeleteで解放できますか? →出来ません。 よってエラーになります。
- Tasuke22
- ベストアンサー率33% (1799/5383)
そう、deleteが原因です。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
new してないんだから delete しちゃいかんです。