dポイントプレゼントキャンペーン実施中!

Visual C++で画像処理のため大きな配列が必要となり,ヒープ領域を使用しています。バグのため,「ハンドルされていない例外が発生しました」のメッセージが出たとき「継続ボタン」でも延々とメッセージが続きますので「中断」を選ばざるを得なくなることがあります。このとき,確保したヒープ領域を開放せずにプログラムを抜けてしまいます。せめてヒープ領域を開放してから中断したいです。何か方法はありませんか。

質問者からの補足コメント

  • うーん・・・

    早速のご回答ありがとうございました。そうなんですか。スタックは開放されるがヒープ領域はメモリ・リークとなると思っていました。そうするとmallocでメモリ・リークが起こるのはどういうときなのでしょうか。

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/10/31 12:19
  • mallocの使い方の記事で,「使用後メモリを解放しないとメモリ不足が起こるので,必ず開放するように」と書いてあったので,「プロセス終了後も確保され続けてしまう」と解釈していました。そうではないのですね。長時間常駐する様なプログラムの場合に重要になるのですね。プロセス終了時にはOSがメモリを自動的に回収するということなら,安心してデバッグを行うことができます。回答を締め切る前にもう一度だけ確認させてください。

    No.2の回答に寄せられた補足コメントです。 補足日時:2021/10/31 16:24

A 回答 (3件)

WindowsやLinuxのようなプロセスモデルのOSではプロセスが終了する時にメモリは全てOSが回収するので問題ありません。

メモリだけでなくファイルやネットワーク接続などの他資源もプロセスが終了する時に全て閉じられますので問題ありません。ただしネットワーク接続は閉じるまでに少しタイムラグがあるので終了したプロセスを直ぐに立ち上げ直すとポートが使用中で使えない場合があります。(固定ポートを使うサーバなど) あとファイルは削除まではしないので、異常終了時にロックファイルなど残ってしまって後の動作に支障が出ることがあります。
    • good
    • 0
この回答へのお礼

ありがとうございました。よく分かりました。これまでヒープ領域を確保したときはかなり神経質になっていましたが大丈夫と言うことですね。

お礼日時:2021/10/31 22:11

>mallocでメモリ・リークが起こるのはどういうときなのでしょうか。



プロセス終了を越えてメモリーがリークすることはありません。
OSが自動的にメモリを回収します。

問題なのはプロセス稼働中にプロセスがメモリーを使いきって
機能を果たす前にプロセスが中断してしまうことなのです。

その頃にはOS自体もメモリが足りなくなって、
パソコンが落ちてしまうこともあります。最悪の事態です。

短期間稼働して直ぐに終わるプロセスなら
メモリリークが起きてもどうということはありません。
この回答への補足あり
    • good
    • 1

えーと、プログラム(プロセス)が終了すればメモリはOSにより全て解放されるので、プログラムを強制終了させるならヒープ領域の開放は必要ないですよ。

この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!