私のプロジェクトには次のコードがあります。変数の破損C++ String Visual Studio 2005
g(const string& str)
{
printf("%s", str.c_str());
}
f()
{
string str("whatever");
g(str);
}
非常に大きなコードの一部です。 g()はdllにあり、apiはエクスポートされます。 f()は実行可能ファイルの一部です。このコードは正常に動作するために使用されました。しかし、現在は、デバッグ構成でのみ動作し、リリース構成では動作しません。デバッグしようとしたところ、g()strの内容が気になってすぐに最初の文がヒットしたことを知りました。それで、それはnullを出力します。
リリース構成は変更されていません。
助けてください。あなたは多分(あなたが異なるコンパイラフラグとDLLやプログラムをコンパイルしている、との違いにSTLの実装が異なっている
:
敬具、暗闇の中で シブ
投票の締め切り:何が失敗しているのか分かるまで、元のコードを減らそうとしてください。投稿されたコードは動作を示さないため、質問は答えられません。答えは、あなたのコードのどこかに何かが間違っていることですが、それは建設的ではありません。異なるフラグでコンパイルした場合、STLの定義が異なる可能性があり、ODRと未定義の動作に違反することになることに注意してください(これは問題かもしれません)。 –
これはビルドの問題のように思えます(おそらくリンカーと関係があります)。私のアドバイス:(1)きれいな再建を行う。 (2)DLLとメインプログラムの両方がリリースモードでビルドされていることを確認してください。 (3)メインプログラムを実行するときに正しいDLLを常にピックアップしてください。 (4)リリース構成が変更されていないと言っても、これが実際に正しいか再度確認してください。 – NPE