C:動的確保の解放について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
agunesu

C:動的確保の解放について

#1

投稿記事 by agunesu » 4年前

私がアルゴリズムの本で見たコードであったのですが、連結リストや木などで、動的確保(malloc)しているのにかかわらず最後には、解放(free)もせず終わっていたりするのですが、メモリリークがガンガン行われている気がするのですが、どうなのでしょうか?それとも気にするほどの物ではないと言うことで、解放していないのですか?

Bull
記事: 149
登録日時: 9年前

Re: C:動的確保の解放について

#2

投稿記事 by Bull » 4年前

まあ OS によるかもしれませんが、システム全体でのメモリリークはないと思っても良いです。
Windows や Unix系(Linux、Max OS を含む)では、プロセスが終了したらメモリは解放されますので、明示的に解放しないまま終了しても大丈夫です。
細かいこと言い出すと Windows で例えば、クリップボードに大きなデータをコピーしたままプログラムを終了してもそのまま残っているとかはありますが、ローカルヒープ(malloc などで確保したエリア)に関してはプロセスが終了すれば解放されますので、余り気にする必要はないです。

当然なことながらプロセスが終了しない限りはメモリが自動的に解放されることはないので、プロセス単位のメモリリークは注意しないといけないです。小さなテストプログラムならば問題ないことが多いですが、大きなプログラムで長時間稼働するものは気をつけないといけません。
メモリリークは見つけづらいバグの一つですので、動的に確保したものは(プログラムが終了するときも)必ず解放するようにした方が良いかもしれません。

agunesu

Re: C:動的確保の解放について

#3

投稿記事 by agunesu » 4年前

返答ありがとうございます。なんとなくロジックを理解することができました。

返信

“C言語何でも質問掲示板” へ戻る