最終的に別のクライアント アプリケーションによって使用されるライブラリを出力するアプリケーションを構築しています。/MDd最近、コード生成 (デバッグ CRT ライブラリ) を使用してデバッグ モードでアプリケーションをビルドしていて、デバッグ モードでも使用してクライアント アプリケーションがリリース CRT に対してビルドされていることを発見し/MDました。したがって、これによりメモリ ヒープの破損エラーが発生する可能性があります。確認するために、リリース モードですべてをテストしたところ、問題なく動作しているようです。
この問題に対処するために、release with debug infoビルド ( /MD) も実行して、クライアント アプリケーションのデバッグ ビルドをこのビルドにリンクしようとしrelwithdebinfoましたが、サンプルをテストしているときに、クライアント アプリケーションで奇妙な動作が見られます。正確には、文字列を割り当てるときは、次のように言います。
std::string client_str = some_namespace_in_my_library::class_name::string_name,
client_str が割り当てられておらず、空のままになっていることがわかりました。これは、すべてがデバッグでビルドされた場合 (ミックス アンド マッチが存在する場合) は正常に機能していました。なぜこれが起こっているのですか?上記の名前空間の文字列は、クラスの静的パブリック メンバーですclass_name。これはすべて MS VC++ 2005 に関するものです。アドバイスやヘルプをいただければ幸いです。ありがとう!