プログラミングの長年を経て、合理的なmallocまたはnewが失敗する(おそらく、私のmallocが非常に妥当であるため)、私はいつもそれをチェックするが、リソース取得失敗の処理
私の場合、アプリは適切なログエントリで正常に閉じることを望みます。この場合、あなたは何をしますか?あなたのアプローチを聞くのは面白いです - あなたはリソースを待つのか、店を閉じるのですか?
プログラミングの長年を経て、合理的なmallocまたはnewが失敗する(おそらく、私のmallocが非常に妥当であるため)、私はいつもそれをチェックするが、リソース取得失敗の処理
私の場合、アプリは適切なログエントリで正常に閉じることを望みます。この場合、あなたは何をしますか?あなたのアプローチを聞くのは面白いです - あなたはリソースを待つのか、店を閉じるのですか?
ダイナミックアロケーションが失敗した場合、何もできません。その状況を処理する操作はほとんどありません。失敗した場合は、アプリをクラッシュさせてください。
メッセージをボトルに入れて、キャプテンが最後のものを残すか、ちょうどクラッシュしますか? – Ulterior
@ user757808:ボトルを割り当てることができない場合、どのようにメッセージをボトルに残すことができますか? I/Oライブラリは、特定のプラットフォームでは動的割り当てなしで動作するようには設計できません。 – Puppy
@DeadMG - おそらくあなたのコアダンプを見て? – KevinDTimm
私は通常、可能な限り正常に私のプログラムをシャットダウンしています。シンプルログにはエラーメッセージが記録されています。 C++ではstd::bad_alloc
のcatch
をmain()
に入れることでこれを行います。 catch
が実行されるまでに、スタックアンワインディングによって呼び出されたデストラクタはメモリを解放していたはずで、ロギング自体が失敗する可能性は低くなります。私はメモリ割り当てを避けます(たとえば、std::string
文字列ではなくchar *
文字列を使用して)ロギングコードを回避すると、ロギングの失敗をさらに減らすことができます。
これはアプリケーションに完全に依存するでしょうか?ユースケースを決めると、適切な仕組みが明らかになります。これは私にとっては無意味な投票のようなものです... –
これは、主観的な投票のように聞こえ、CやC++の言語特有のものでもないようです。 – Puppy
このような状況で人々の考え方を知りたいです。はい、私はそれをプログラミングしているので、C、C++はちょうどです – Ulterior