我有一个原型函数,如下所示:
void function(std::string str);
在加载和使用该 dll 的另一个程序中的主函数中调用此函数。
function("some string value here");
从这个函数返回时,我得到堆损坏错误:
Windows 在 program.exe 中触发了一个断点。
这可能是由于堆损坏,这表明 program.exe 或其已加载的任何 DLL 中存在错误。
这也可能是由于用户在 program.exe 获得焦点时按 F12。
输出窗口可能有更多诊断信息。
玩弄我的代码,我注意到一些奇怪的观察结果:
1. 当传入的字符串长度小于 11 个字符时,我没有收到任何错误,只要我添加更多字符,就会出现错误。
2. 将参数类型从 更改为 时std::string
,std::string&
错误消失。传递引用的想法来自这里。
3. 我已经注释掉了函数的主体。那里的操作与产生的异常无关。
4. 将参数类型从 更改std::string
为char*
也可以解决问题。
什么可能导致此错误?我该如何解决?