为了账号安全,请及时绑定邮箱和手机立即绑定

断点位置是 dbgheap.c 怎么回事 ?怎么改?

断点位置是 dbgheap.c 怎么回事 ?怎么改?

C
慕尼黑5688855 2023-01-12 23:19:38
有如下代码:CString temp="啊啊啊啊";char *str=new char[temp.GetLength()];str=temp.GetBuffer(0);delete []str; 运行到delete时 遇到断点,弹出对话框:Windows 已在 proj2.exe 中触发一个断点。其原因可能是堆被损坏,这也说明 proj2.exe 中或它所加载的任何 DLL 中有 bug。输出窗口可能提供了更多诊断信息 
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

char *str=new char[temp.GetLength()]; 
申请了一段内存,内存地址交给str
str=temp.GetBuffer(0);
修改了str的所指向的地址
delete []str;
释放指针指向的内存

由于修改了指针所指向的空间,因此你释放的内存并不是你申请的,自然会出错

用内存或字符串拷贝函数将 temp的内容复制到str中,而不是修改str

查看完整回答
反对 回复 2023-01-15
?
湖上湖

TA贡献2003条经验 获得超2个赞

楼主基础上修改了一下VC++2010下无误原因是char *末尾并没有\0结束符delete造成内存泄漏// CString temp = _T("啊啊啊啊");
TCHAR * str = new TCHAR[temp.GetLength()];
str = (LPTSTR)temp.GetBuffer();
str = NULL;
delete [] str;

查看完整回答
反对 回复 2023-01-15
  • 2 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信