求助,哪位大侠帮帮我!

woairentiyishu 2013-05-31 09:11:24
我用MFC编程,写的程序都没错,但是在点击运行按钮之后运行的时候会出现这样的错误:
“Windows 已在 C45.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 C45.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 C45.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。”
奇怪的是有时候出现,有事不出现,像是着了魔一样,不知道是怎么回事?
如果关掉程序,重启之后,第一次一般可以运行,但之后又会间歇的出现如上问题,我在编写一个程序任务,这个问题纠结我好长时间了,网上找也没找到解决办法,希望在这里能遇到高人,指点迷津!
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶恭介叶恭介 2013-05-31
  • 打赏
  • 举报
回复
你要看点击运行按钮之后运行干了什么, 代码给出来啊。 这是谷歌搜的: 原因: 程序中有类似以下的代码: CString str( "3" ); char *ptr = str.GetBuffer(0); 而我在后面的代码中改变了ptr指针指向的内容,在"3"这个字符前加了19个空格,这样ptr指向内容的长度变成了20,超过了原字符串的长度。 解析: 由于当GetBuffer()函数中的参数取为0时,分配的空间是字符串所要的空间长度,以上两行代码,将会自动分配1。而在后面的操作中使字符串的长度超出了该范围,因此存在内存分配不足的问题,从而会出现“问题描述”中的错误提示[6]。只要把GetBuffer中的参数改成大于或等于20,就将不会再报错。 这时在char *ptr = str.GetBuffer(20);的下一行应加一行str.ReleaseBuffer(); 因为“如果你使用由GetBuffer返回的指针来改变字符串的内容,你必须在使用其它的CString成员函数之前调用ReleaseBuffer函数。[2]” ReleaseBuffer函数是用来告诉CString对象,你的GetBuffer所引用的内存已经使用完毕,现在必须对它进行封口,否则 CString将不会知道它现在所包含的字符串的长度,所以在使用完GetBuffer之后,必须立即调用ReleaseBuffer函数重置 CString的内部属性,其实也就是头部信息[1]。 你用谷歌搜一下吧。百度不好使
X MAN 2013-05-31
  • 打赏
  • 举报
回复
调试一下,你就知道。
dahaiI0 2013-05-31
  • 打赏
  • 举报
回复
DLL有问题呗。。
Eleven 2013-05-31
  • 打赏
  • 举报
回复
你自己Debug下调试一下看看~
yaozhiyong110 2013-05-31
  • 打赏
  • 举报
回复
调试呗...

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧