博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态内存分配———越界访问
阅读量:5231 次
发布时间:2019-06-14

本文共 789 字,大约阅读时间需要 2 分钟。

  在编写关于内存动态分配的程序时,很容易遇到越界访问的问题,如果是在visual studio环境下,一般会报 HEAP CORRUPTION DETECTED 错误。堆栈的越界访问又分为两种:堆前和堆后的越界访问。堆前的越界访问比较少见,VS2010弹出的报错信息为:

HEAP CORRUPTION DETECTED:after Normal block(#***) at 0x****.CRT detected that application wrote memory before start of heap buffer.

 

 

 

 当遇到这种错误时,上面的信息把出错的原因说得很清楚了:就是在分配的堆缓冲区之前写入了数据。可以利用单步调试定位到引起该错误的具体代码段,看是不是变量在运行时有小于0的状态。看如下代码:

char* docLex; docLex=(char*)malloc(len+1);memset(docLex,0,len+1);  ......    //省略若干代码 while(j>=0&&docLex[j]!=' '){    j--;}......free(docLex);  //代码运行到此处报错

仔细分析while循环可知当j=0并且docLex[j]!=' '时,j--语句执行之后j=-1,超过了docLex数组最小临界下标0,访问了分配空间以外的数据,如果调用free()函数释放空间的时候,系统会会先做内存检测,如果越界访问了就会产生崩溃终止程序运行。

  同样的,如果程序访问了超过数组最大临界下标的数据,就会产生堆后的越界访问问题,原理是一样的,解决问题的方法还是要定位到你的数组下标自增语句,看是否增大到超过你的数组长度。

 

 

 

转载于:https://www.cnblogs.com/kylecky/p/3363912.html

你可能感兴趣的文章
XS128超声波程序
查看>>
一个UUID生成算法的C语言实现——WIN32版本
查看>>
关于yarn安装,这里做一个备份
查看>>
自定义控件(视图)2期笔记11:View的滑动冲突之 概述
查看>>
tb连续aaaaa123aaa自适应
查看>>
i am so happy
查看>>
CSS预编译语言-LESS
查看>>
xml基础之二(XML结构【1】)
查看>>
C# 防止同一个账号多次登录(cache方法)
查看>>
WPF之Binding
查看>>
[bbk5323] 第114集 -第14章 - 数据库空间管理 03
查看>>
java控台输入
查看>>
2014年终总结
查看>>
ps遇到的问题及笔记
查看>>
如何用最暴力的方法改写Liferay的原生portlet
查看>>
【Linux/unix网络编程】之使用socket进行TCP编程
查看>>
KIWI Syslog配置
查看>>
Nowcoder Two Graphs ( 图的同构 )
查看>>
LeetCode 62. Unique Paths
查看>>
图书管理系统(增删改)
查看>>