メモリーリークとは、mallocしてそれをfreeしないことでなくて、mallocしたメモリへのポインタがどの変数にも入っておらず、アクセス不可能になることなんですか?

ベストアンサー

6

6人がナイス!しています

> アクセス不可能になることではなく、確保したメモリ領域が不要になったのに解放されず放置されていること 放置されてることがメモリーリークなんですね。mainのreturnで返す値になってる場合以外、実行される直前では、全てが不要なので、残ってるのは全てメモリーリークなんですね。 ありがとうございます

ThanksImg質問者からのお礼コメント

みなさん、ありがとうございました!!! メモリーリークについての、理解がとても深まりました。

お礼日時:2021/12/3 2:20

その他の回答(4件)

0

メモリ「リーク」とはプログラマが知らないところでメモリが解放されずに残り続けることを言います。 逆に言えばプログラマが「承知して」解放していないならリークでは無いでしょう。 承知しているならそれが必要なメモリで、不要になったら解放するつもりのコードが書かれているでしょう。 解放を忘れているまたは、解放するつもりでもバグによって(つまり承知せず)解放されない場合がリークです。 アクセス不可能になる場合も同様です。

1

本質をついてます。その通りです。 freeしてないだけなら、まだ使うかもしれないって事で言い訳できます。 プログラムを終了時点で確かにリークにはなるんですが、そこで解放されるんで実はたいした問題ではありません。 (旅館に泊まって、ごみを捨てずに帰って、旅館の人が行儀の悪い客だと思いながらも掃除してくれるみたいなかんじですね) mallocして、freeせずにmallocして同じポインタに代入してしまったら、先のアドレスは把握されなくなってリークです。この場合、プログラムを動かし続けると同じことを何度も繰り返してメモリを食いつぶす事に繋がるんで大問題なのです。

1人がナイス!しています

0

メモリーリークは、あるプログラムがメモリーをどんどん使ってしまい、他のプログラムに空きメモリが無く成ってしまい動けなくなる事を指します。

> 他のプログラムに空きメモリが無く成ってしまい動けなくなる事を指します これ自体がメモリーリークなんですね。 これはメモリーリークがあるから、起こる問題であって、これ自体がメモリーリークだと思ってませんでした。

0

メモリリークは確保したメモリ領域を開放せずにプログラムの実行が終了してしまうことで起きます。 メモリリークという言葉の意味に「どうしてそういう事態になったのか?」は関係ありません。