C での新しい割り当て
C では、 new 演算子がメモリの割り当てに失敗すると、 std::bad_alloc 例外が発生します。ただし、VC6 などの特定のコンパイラはこの標準から逸脱していると報告されています。
VC6 の動作
VC6 は C 標準に準拠しておらず、代わりに 0 (または NULL) を返します。 ) メモリ割り当てに失敗した場合。この不適合により、新しいステートメントのたびに常に NULL をチェックする必要があるため、コードが乱雑に見える可能性があります。
解決策
Microsoft はこの問題をナレッジで認めています。基本記事 KB276944。 VC6 でこれを回避するために、MSVC ではカスタムの新しいハンドラーとのリンクが許可されています。新しい MSVC コンパイラ (7.0 以降) では、nothrownew.obj オブジェクト ファイルとリンクすると、VC6.
VS2005 および Beyond
MSVC 8.0 (VS2005) と同じ動作が提供されます。 ) new がデフォルトで一貫して std::bad_alloc を発生させる変更が導入されました。提供されているコード例に示すように、0 を返すオプションは std::nothrow パラメーターを使用して指定できます。これは、コードがどのコンパイラ バージョンでも動作できるようにする下位互換性のあるソリューションです。
以上がC のメモリ割り当ては、新しいコンパイラと比較して VC6 でどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。