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