- ベストアンサー
mallocで確保したメモリをfree解放する必要
- mallocで確保したメモリをfree解放する必要があるかについて疑問を持っている
- 解放しないことによるデメリットについて知りたい
- プログラム終了後にメモリが自動的に解放されるのか疑問を持っている
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あなたが職業プログラマで、他人からお金をもらってプログラムを組む人ならば、 資源管理に気を配るべきでしょう。 Cプログラムで、この手のことがきちんと行われていない場合には、明らかな瑕疵 (プログラム上の大きな不具合)として扱われます。 (建物を作ったときに建築基準を満たしていないのと同じで、いくら、 「震度7の地震が来ないと倒れないよー」といったところでダメなものはダメ) 確かに、次の場合にはご指摘の通り、まぁ実害はないでしょう。 ・実行時間が短い ・マシンのリソース量に比べて、使用するリソースが多くない 逆に言うと、このどちらかが崩れる場合、 ・ずーーーーと動かさないといけないプログラム ・使用するリソースが非常に多い場合 ちゃんと使わなくなった資源を解放してあげないと、よく分からない不具合に 悩まされることになります。 私の実務上の経験則なのですが、次のことが言えます。 ・普段から確保した資源の解放をきちんと考えて実践し、それが習慣になっていない人は、 (ある日やれと言われても)そもそも出来ない。 ですので、どんな小さなプログラムでも資源の解放を実施し、それを習慣化させてください。 (めんどくせーというのなら、ガベージコレクション機能のある開発環境に行きましょう!)
その他の回答 (3)
- wormhole
- ベストアンサー率28% (1626/5665)
私としては「malloc()で確保したら必ずfree()で解放」と機械的に覚えるのはお勧めしません。 「free()する必要があるなら必要な場面でfree()すればいい」と私は思ってます(「free()しなくていい」という意味ではないです) >また、解放しないことによるデメリットで、メモリを圧迫する以外にはなにがあるのでしょうか。 「メモリを圧迫する」ではなくて「そのプログラムで再利用されない」かと。
- BuriBuri4
- ベストアンサー率28% (150/525)
>ファイルポインタでファイルを開いているときに、プログラムが終了すると開いているファイルを自動的に閉じるように これ、ファイル自体は閉じられるけどストッリームバッファに残っている分は破棄されるからファイルが正しく生成できない可能性が高い。 UNIX系OSでコレをやるとドツボにはまる事がある。 >メモリを圧迫する以外にはなにがあるのでしょうか 利用不可能なメモリーブロックになる可能性がある。 処理系依存だからOSが貧弱 or 無い(組み込み系とかの) 場合にはトラブルになる可能性が高い。 C言語はアセンブリ言語に近く、UNIXを書くために作られた言語なんだから全てがプログラマー責任。 アプリケーションプリグラムだけがプログラムではないのでプログラマー責任は果たす癖を付けておかないと、いつかポカをやる。 ってか、そういうプログラマ責任が面倒なのであればC言語みたいな低級言語(プログラマ任せの部分が多い言語)ではなくJavaのような高級言語(コンパイラ任せの言語)を使ったほうが良いと思う。
- wolf03
- ベストアンサー率22% (241/1086)
最近はOSが監視していて解放してくれる場合が多いが、完全であるはずも無い。 本来はプログラムで管理すべき物である為、解放しなければメモリを食いつぶし再起動しなければOSさえ動作しなくなる。 今時はメモリの量が多いので、そこまで行くのに時間が掛かるが、昔は少なかったので厳しかった。
お礼
なるほど。確かに今は小さなプログラムしか書いていないのですが、先を見ればとても大事なことだったのですね。 肝に命じておきます。