3

Visual C++ 6.0 から VC++ 9.0 (2008) に移植されたレガシー コードを使用しています。_CRT_SECURE_NO_WARNINGSプリプロセッサ定義を使用してセキュア CRT 警告を無効にしました。std::vectorしかし、それはデストラクタでのクラッシュにつながりました。

使用上の問題はあり_CRT_SECURE_NO_WARNINGSますか?

4

3 に答える 3

1

それらは無関係の問題です。_CRT_SECURE_NO_WARNINGS非推奨の警告を抑制するだけで、プログラムの動作は変更されません。実際の問題をデバッグする必要があります。

于 2011-08-19T11:23:37.313 に答える
1

あなたは間違いなく、「それを機能させる」ためだけに迅速で汚い解決策が必要な人の1人です。悪いアプローチ。警告を非表示にするディレクティブを定義しないでください。代わりに、コードですべての警告 (レベル 4 - /W4) を有効にして、それらすべてを慎重に削除してください。考えられるすべての警告とそれらによって引き起こされる副作用を削除して、コードをより堅牢にします。

VC6 と最新の VC コンパイラには大きな違いがあります。VC6 で問題なく動作していたものが、現在は動作しない可能性があります。これは、最新のコンパイラのせいではなく、コードのせいです。コンパイラ/デバッガは、欠陥を早期に (開発/デバッグ段階で) 発見するのに役立ちます。

また、いくつかの静的分析を実行することをお勧めします (/analyzeスイッチを使用している Visual Studio の上位バージョンでのコード分析など)。また、コードに対して動的コード分析を実行して、問題をさらに見つける必要があります。

于 2011-08-20T05:24:26.567 に答える
1

どのようにクラッシュしていますか?これは、ある場所にメモリがあり、ベクター内のメモリを上書きしてから、ベクターが解放される前に解放しているように聞こえます。ポインターがあればどこにでも行きます。標準に準拠したコンパイラを使用しているため、それらをブースト共有ポインタまたはブースト配列に置き換えます。イテレータを使用する方が安全なポインタ演算の必要性を取り除くためのもの。

于 2011-08-19T11:36:41.657 に答える