2

ヒープ上で何かを宣言し、メインプログラムが停止した場合、呼び出しchar *a=new char[1000]がない場合、その割り当てられたメモリはどうなりますか? delete[]ヒープに残りますか、それとも自動的に割り当て解除されますか?

4

4 に答える 4

8

C++ に関する限り、それがどうなるかはまったく未定義です。ただし、ほとんどの妥当なオペレーティング システムは、プロセスが終了したときに、プロセスによって割り当てられたメモリをクリーンアップします。ただし、自分で後片付けをすることは非常に良い習慣です。

于 2013-03-12T16:57:53.347 に答える
2

C ++標準で指定されているのは、から戻った直後に「終了」することです。main()これは、グローバルオブジェクトがこの後のある時点で破棄され、atexit()他の「終了中」レベルの関数もmain復帰後に実行されることを説明しています。ただし、プログラムが存在するメモリに何が起こるかは、C++標準では指定されていません。同じことがヒープの内容にも当てはまります。

システムにOSがある場合、アプリケーションをクリアするのはOS次第です(C ++ではOSが必要であるとは指定されていません)。

于 2013-03-12T17:07:35.170 に答える
0

アプリケーションがクラッシュしたり、何らかの理由で中止されたりすると、通常の場合、OSはメモリを再利用します。しかし、これは未定義です。

于 2013-03-12T17:01:34.890 に答える
0

通常は OS によってクリアされます。

于 2013-03-12T16:59:28.520 に答える