c++关于越界访问(内存溢出)
来源:互联网 发布:门诊处方软件 编辑:程序博客网 时间:2024/05/18 20:46
越界访问指访问了不是程序申请的内存区域,比如申请了5个字节的char数组,结果读写数据的第六个元素,或者访问了释放后的内存等等。这种错误,大部分情况会抛出AV(access violation)异常,有时不抛出异常, 有时导致软件直接崩溃(类似"Abnormal program termination");而且抛出异常的地方大多不是越界访问的地方(比如下面的例子),让人摸不着头脑;不抛出异常的时候可能是因为访问了释放后的内存,虽然内存释放了,但还没被系统回收,但时间长了系统也会运行不正常;而且有时在project下的debug版本和release版本下表现的也不一样,比如有时在debug版本下直接导致软件退出,提示:Abnormal program termination,在release版本下有可能不报异常,但运行一段时间后软件还是没有按照预期运行,比如运行迷失等。以下是一个我经历的越界访问的例子:
std::string tmpStr;...std::string funCode=...;...char *tmpc=new char[len-48+1];memset(tmpc,0,len);...tmpStr += funCode;//AV异常抛出的地方...
如果你仅仅查看异常抛出的地方,只是调用std::string的operator+=函数,怎么看也看不出有什么问题! 如果你往前看就会发现我们申请了len-48+1个字节的内存空间, 但是在memeset的时候却填充了len个字节的空间, 多填充了47个字节的空间,而这个越界填充可能就非法填充了tmpStr内部的内存空间,破坏了tmpStr内部的结构,从而造成std::string在函数operator+=的时候抛出异常!
1 0
- c++关于越界访问(内存溢出)
- 内存泄漏、越界、溢出
- 关于C++内存越界访问的问题
- 内存访问越界
- 【转】内存访问越界
- 内存访问越界
- 内存访问越界
- 内存访问越界
- 内存访问越界
- 内存访问越界问题
- 访问内存越界
- c++内存访问越界
- 内存越界访问
- 内存访问越界
- 内存访问越界
- 内存访问越界
- 内存溢出、内存泄露、内存越界、缓冲区溢出、栈溢出
- 内存溢出、内存泄露、内存越界、缓冲区溢出、栈溢出
- Nutch环境搭建+Solr的使用
- asp.net将ppt文档转换成pdf
- 设计模式-策略模式
- 在Windows7下Word没有了菜单栏的解决办法
- dede自定义添加字段的调用
- c++关于越界访问(内存溢出)
- Amazon EC2免费VPS防止超额被扣钱三大方法:流量 硬盘读写 运行时长
- Java.Map的三种遍历方法
- 人人转载
- 设计模式C++实现三——适配器模式
- 常用的字符串的截取方法-FenGKun
- 球面投影全景图快速拼接
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
- 【Android】神奇的android:clipChildren属性