如何解决长字符串在 Release 模式下调用字符串的析构函数
我刚刚遇到一个奇怪的错误,代码在调试模式下工作,但在发布模式下不起作用。经过惨痛的调试,发现调用了如下函数(来源:xstring),程序跳转到了if块_Mypair._Myval2._Large_string_engaged()
。然后,我相信一些重要的对象被破坏了,整个程序崩溃了。当我更改长字符串的长度时,错误消失。我想知道为什么会发生这种情况,以及如何在 Release 模式下使用长字符串。字符串大约有 20 个字母。
void _Tidy_deallocate() noexcept { // initialize buffer,deallocating any storage
_Mypair._Myval2._Orphan_all();
if (_Mypair._Myval2._Large_string_engaged()) {
const pointer _Ptr = _Mypair._Myval2._Bx._Ptr;
auto& _Al = _Getal();
_Destroy_in_place(_Mypair._Myval2._Bx._Ptr);
_Al.deallocate(_Ptr,_Mypair._Myval2._Myres + 1);
}
_Mypair._Myval2._Mysize = 0;
_Mypair._Myval2._Myres = _BUF_SIZE - 1;
// the _Traits::assign is last so the codegen doesn't think the char write can alias this
_Traits::assign(_Mypair._Myval2._Bx._Buf[0],_Elem());
} void _Tidy_deallocate() noexcept { // initialize buffer,_Elem());
}
void __CRTDECL operator delete(void* const block) noexcept
{
#ifdef _DEBUG
_free_dbg(block,_UNKNowN_BLOCK);
#else
free(block);
#endif
}
先谢谢你!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。