今天在调试的时候突然冒出来一句:HEAP CORRUPTION DETECTED: after normal block at 0x0067B860, CRT detected that the ap

今天在调试的时候突然冒出来一句:HEAPCORRUPTION DETECTED: after normal block at 0x0067B860

CRTdetected that the application wrote to the memory after end of heapbuffer


大概意思是在0x0067B860出现一个阻塞,CRT侦测到在堆缓存尾段有程序试图写进内存。意思大概就这样,瞎翻译的。

于是调试了一下,这是在main函数离开释放堆空间出现的,心急如焚的我看了一遍又一遍的程序,又改了了一改代码,尼玛还是没有解决不了问题。问谁呀,一切答案尽在百度。百度上都说是内存溢出,

再查了一下。是这个对象的内存出现了一点问题。如图

CStrings1 = "abc", s2 ="9080",s3 ("this is a goodday", 4),ss('^',8);


于是我找到构造函数,顺藤摸瓜胡乱摸一把.


CString::CString(charch, int nRepeat)

{

m_pData= new char[nRepeat + 1]{0};

memset(m_pData,ch, nRepeat);

m_pData[nRepeat+ 1]='\0';

}

程序查了个遍,没有问题啊,申请的堆空间大小是nRepeat +1,我也只用了这点内存啊.没毛病啊,有有时候事情并不是你想像的那样,可能升级了吧,于是我将申请的内存该大了一点点

CString::CString(charch, int nRepeat)

{

m_pData= new char[nRepeat + 5]{0};

memset(m_pData,ch, nRepeat);

m_pData[nRepeat+ 1]='\0';

}


明明我申请的堆空间够了。带着疑惑,还是把代码改了一下,结果完美,明没有出现问题,明内存刚刚好啊,怎么这样就执行不了了

CString::CString(charch, int nRepeat)

{

m_pData= new char[nRepeat + 1]{0};

memset(m_pData,ch, nRepeat);

m_pData[nRepeat+ 1]='\0';

}


再看了一下不对,最后一句貌似是有点错误.我申请了 nRepeat + 1个,而计算集中排序是从0,1,2开始,所以有可能是这句 m_pData[nRepeat+ 1]='\0';
出现问题.我是又试了一下;结果稍后解答
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值