gpt4 book ai didi

c++ - 你能解释一下这个 C++ 删除问题吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:25 25 4
gpt4 key购买 nike

我有以下代码:

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 之外运行时似乎运行良好

最佳答案

  1. 如果 StringUtils 是单独编译的(例如,使用不同的编译器版本),则对象布局可能会发生冲突。
  2. 如果 StringUtils 在 DLL 中,您必须确保它和主程序都被编译为使用 DLL 中的标准库。否则,每个模块(可执行文件和 DLL)都会有自己的堆。当 StringUtils 尝试处理从不同堆分配的字符串中的数据时,会发生不好的事情。

关于c++ - 你能解释一下这个 C++ 删除问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com