モバイルアプリ(約2Mb以下の限られたメモリ)を開発しているときに、malloc()
失敗したときに、UIにエラーを報告するためのコールバックを追加しましたが、後続のコードはまだの戻り値をチェックする必要がありmalloc()
、これにより多くのダーティコードが発生する可能性があります(返されたメモリがそうであるNULL
か、またはfalse
割り当てによって引き起こされたリターンコードが失敗したかどうかを確認してください)。アプリ全体をexit()せずに後続のコードを終了するエレガントな方法はありますか?
2 に答える
「メモリ割り当てに失敗した後も継続するエレガントな方法はありますか」ということですか?
はい、ある程度はありますが、正しく行うのは非常に困難です。setjmp
andをいじることでlongump
、try/catch に少し似たある種の緊急回復システムを自分自身に与えることができますが、コール スタックを通過するときは、クリーンアップに細心の注意を払う必要があります。
さらに、クリーンアップが実際に割り当てられたメモリのクリーンアップを開始するまで、その後の malloc の呼び出しは失敗する可能性があります。
ほとんどの場合、エレガントには、エラーステータスをコールスタックに戻して、どこでも処理するようにする必要があります。
それで、ポップアップウィンドウでユーザーに通知してから終了したいですか?
どのライブラリを使用しているかわかりません.win32ではモーダルウィンドウに独自のメッセージループがあるので簡単です.モーダルダイアログを開始する関数を終了する必要はありません.
とにかく、モーダルダイアログが終了した後に出口を呼び出します。実際のクリーンアップ ロジックが必要な場合は、それは難しく、プログラム全体の構造と設計に関するものだと思います。
更新:
ちなみに、メモリが非常に少ない場合、ポップアップでさえ失敗する可能性があります。