今天在调试的时候突然冒出来一句: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';
}
出现问题.我是又试了一下;结果稍后解答