9

例外をキャッチした後に実行を継続することは理にかなっていEOutOfMemoryますか、それともヒープまたはスタックが高い確率で破損していますか?

EOutOfMemoryワイルドアドレスへの書き込みなどのバグによる以前のメモリ破損が原因であるという意味ではなく、 を呼び出しGetMemてキャッチする正しいコードを意味しますEOutOfMemory

4

2 に答える 2

6

私の意見では、 から続けようとしても意味がありませんEOutOfMemory。私の経験では、ヒープが破損する可能性が非常に高く、将来的にエラーが発生する可能性があります。通常、最も安全な方法は、プロセスを終了することです。

于 2013-02-20T09:23:04.710 に答える
1

一般に、回復しようとしても意味がないことに同意します。ただし、特定の状況では役立つ場合があります。たとえば、ユーザーの選択に応じて大量のメモリを割り当て、それが失敗した場合は、完全に取り消して別の設定で再試行させることができます。点群を 3D メッシュに変換するためにこれを行います。これには、メモリ要件が事前にわからないいくつかの手順が含まれます。迅速かつクリーンなバックアウト パスを使用して、回復可能にしたい手順を慎重にコーディングするだけです。たとえば、私のデータ構造の一部は、断片化されたメモリの問題を最小限に抑えるために、各行が個別に割り当てられたビットマップまたはバッファーです。コンストラクターには try... except handling があり、EOutOfMemory 例外をスローし、デストラクタは既に割り当てられている行をすべて解放します。できます'

于 2013-03-07T01:34:30.993 に答える