我有以下代码:
std::string F()
{
WideString ws = GetMyWideString();
std::string ret;
StringUtils::ConvertWideStringToUTF8(ws, ret);
return ret;
}
WideString 是第三方类,StringUtils 也是如此。它们对我来说是一个黑匣子。第二个参数通过引用传递。
当我逐步通过调试器时,该行return ret
会抛出一个讨厌的弹出窗口(Visual C++),说堆可能已损坏。仔细检查返回的字符串副本是可以的,但删除ret
失败。ret
返回前包含正确的值。
转换功能可能会导致这种情况吗?有什么想法可以解决吗?
更新:
- 项目本身是一个dll
- StringUtils 是一个库
- 项目是针对多线程 CRT 编译的(不是调试,不是 dll)
- 在 Visual Studio 之外运行时,程序似乎运行良好