5

Cでは、実行中にメモリを割り当てた場合malloc、プログラムで例外/エラーが発生し、プログラムに手動で組み込まれexit(1)たステートメントで終了しますか、Cコンパイラは予期しない終了を行う前にメモリを自動的に解放しますか、それとも手動で終了する必要がありますかexit(1)プログラムの行の直前でこれを行います。

Ubuntu32ビットプラットフォームでgcc-4.5.2コンパイラを使用しています。

4

2 に答える 2

11

を呼び出すとexit、OSは割り当てられたすべてのメモリを取り戻します。したがって、を呼び出す必要はありませんfree

編集:しかし、将来変更するときに解放の呼び出しを見落とす可能性があるため、プログラムで割り当てたメモリを解放することをお勧めします。

于 2012-05-14T17:15:00.467 に答える
6

適切に設計されたオペレーティング システムでは、プロセスが (exit()、die()、abort()、または raise() を使用するか、エラー、シグナルなどによって強制終了されることによって) 終了すると、オペレーティング システムは解放する必要があります。スタックスペース、ヒープ、割り当てられたメモリ(通常はヒープ上)を含む、プロセスによって使用されるすべてのリソースを増やし、開いているファイル記述子を閉じます(* NIXシステムの場合)など。

ただし、「free() を呼び出す必要はありません」には行きません。malloc() したメモリを明示的に free() しないと、プログラミング/設計の概念が悪くなります。最終的には OS に頼ることができますが、後で変更したときにメモリ リークが発生する可能性があります。プロジェクトは終了しませんが、使用済みメモリを free() するのを忘れています。

于 2012-05-14T17:25:09.383 に答える