CRT detected that the application wrote to memory after end of heap buffer
2015-07-23 15:40
537 查看
最近闲的无聊,把C++ STL中的string容器类自己尝试实现一遍,但是在写到insert()函数时,出现一个错误,就是CRT deceted that the application wrote to memory after end of heap buffer,最后上网看了些博客,自己调了下代码,解决了该问题。
一般的原因是对内存块进行不当的操作,比如字符串最后不加NULL或者'\0',导致程序释放内存时超出编辑;或者是写数据时超出申请的空间大小。
代码如下:
在第一个for循环处,我用的strlen(newString.m_data) - 1,而此时newString空间中,只申请了空间,并没有数据,也没有字符串结束标志,所以这个for循环就会访问越界,导致问题出现。修改方法是,将这一句话改为:
for(iIndex = 0;iIndex < strlen(m_data)+strlen(stem);++iIndex)就好了。
总结:(1)对内存操作一定要细心,最好多分配一个字节的内存。
(2)如果出现问题,加断点调试。
一般的原因是对内存块进行不当的操作,比如字符串最后不加NULL或者'\0',导致程序释放内存时超出编辑;或者是写数据时超出申请的空间大小。
代码如下:
MyString& MyString::insert(unsigned int ipos,const char *stem) //任意位置插入函数 { MyString newString; int iIndex; if (ipos >= 0 && ipos < strlen(m_data)) //ipos在范围内部 { newString.m_data = new char[strlen(m_data) + strlen(stem) +1]; //申请空间 newString.m_end = m_data + strlen(m_data) + strlen(stem); for (iIndex = 0;iIndex < strlen(m_data) + strlen(stem) -1;++iIndex) { if (iIndex < ipos) //拷贝原始串 ipos前的数据 { newString.m_data[iIndex] = m_data[iIndex]; } else { if (iIndex >= ipos && iIndex < (ipos + strlen(stem))) //添加子串 { newString.m_data[iIndex] = stem[iIndex - ipos]; } else //添加原来字符串后边的串 { newString.m_data[iIndex] = m_data[iIndex - strlen(stem)]; } } } newString.m_data[iIndex] = NULL; //最后一位置空 表示字符串结束 } *this = newString; return *this; }
在第一个for循环处,我用的strlen(newString.m_data) - 1,而此时newString空间中,只申请了空间,并没有数据,也没有字符串结束标志,所以这个for循环就会访问越界,导致问题出现。修改方法是,将这一句话改为:
for(iIndex = 0;iIndex < strlen(m_data)+strlen(stem);++iIndex)就好了。
总结:(1)对内存操作一定要细心,最好多分配一个字节的内存。
(2)如果出现问题,加断点调试。
相关文章推荐
- android 比较靠谱的图片压缩
- android 围绕中心旋转动画
- 麦子学院android开发教程:android手势翻页效果
- iOS下微信语音播放之切换听筒和扬声器的方法解决方案
- 有时候当你修改了xib 你调试,各种改的时候又没变化的时候
- iOS中几种数据持久化
- 苹果开发者文档
- swift里UITableView简单的用法
- 【android开发】使用文件存储时的几种模式介绍
- Struts2中关于"There is no Action mapped for namespace / and action name"的总结 今天在调试一个基础的Struts2框架小程
- Android实现仿慕课网下拉加载动画
- Android功能代码
- 浅析Android权限机制(一) —— Android的权限机制
- 微信整合的时候 出现这个“redirect_uri 参数错误”
- Android手写开源项目和资料搜集
- Android Studio如何减小APK体积
- android 4.4以上可以实现的沉浸式状态栏效果
- Cocos
- android音频和视频的处理
- 报错:Binary XML file line #7: Error inflating class android.support.v7.widget.RecyclerView