次のコードがあります。
std::string F()
{
WideString ws = GetMyWideString();
std::string ret;
StringUtils::ConvertWideStringToUTF8(ws, ret);
return ret;
}
WideString はサードパーティ クラスであり、StringUtils も同様です。彼らは私にとってブラックボックスです。2 番目のパラメーターは参照によって渡されます。
デバッガーをステップreturn ret
実行すると、ヒープが破損している可能性があるという厄介なポップアップ (Visual C++) が表示されます。よく調べてみると、返された文字列のコピーは問題ありませんが、の削除はret
失敗します。ret
返す前に正しい値が含まれています。
これを引き起こすために、変換関数は何ができるでしょうか? 修正するアイデアはありますか?
アップデート:
- プロジェクト自体はdllです
- StringUtils はライブラリです
- プロジェクトはマルチスレッド CRT に対してコンパイルされます (デバッグではなく、dll ではありません)。
- Visual Studio の外部で実行すると、プログラムは正常に実行されるようです