锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源心得 / HEAP CORRUPTION DETECTED和CRT detected that the application wrote to memory after end of heap buffer
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

HEAP CORRUPTION DETECTED和CRT detected that the application wrote to memory after end of heap buffer


锐英源开源心得,禁止任何转载,有技术问题请找锐英源孙老师QQ396806883,微信ryysoft。


近期用VC++2010开发电机设备监控和管理系统,遇到奇怪的问题,在函数退出返回上级时,出现堆栈破坏错误,提示就象标题这样,现在把一些过程描述下,供大家学习提高。

定位

在出非法操作提示窗口上,点重试按钮,看到的代码行是函数的结束花括号,所以要定位哪个变量导致的堆栈破坏!

我记的以前好像把对象类型修改为指针可以,改过后不行

先是用注释掉区块代码的方法来定位,找了半天也没头绪,后来从网上找了个断言: _ASSERTE( _CrtCheckMemory( ) )。定位到是一个对话框定义时出问题。

解决

这时候想到以前写股票软件时,也遇到过类似问题,是调整对话框里成员的位置来解决的,所以照搬这个做法,把对话框里的如下成员:

	CScrollBar m_srlslvalue;
	CScrollBar m_srltzspeed;
	CScrollBar m_scrsladd;

放到简单类型成员变量上面,问题解决。

总结

堆栈破坏错误HEAP CORRUPTION DETECTED,一般是向变量写数据时,越过了变量占用内存造成,比如越过了字符数组的0结束符位置,多写入些字符,就会造成。

但是本例里,并不是这样。我的对话框里没有字符数组,只有滚动条和简单类型成员,所以结论就是在消息触发的函数里定义对话框是有限制的,对成员的位置布局有限制,遇到这类限制,VC++就不稳定!

为什么有这类限制?和底层处理有关。心得就是:环境说你不行,你就不行,改成环境能允许的,你才行。这也是软件开发的本质,事情不是上层程序员说了算,要能适应环境。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内