- 浏览: 195808 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (231)
- C++学习 (41)
- vc学习 (25)
- vc异常 (4)
- Flex (2)
- Ext (0)
- java学习笔记 (15)
- mysql学习笔记 (1)
- ibatis学习笔记 (7)
- struts1学习笔记 (1)
- hibernate学习笔记 (3)
- javascript学习笔记 (8)
- eclipse快捷键 (2)
- 英语学习 (1)
- cmd (1)
- eclipse 配置 (2)
- 其他 (4)
- JAVASE (34)
- firefox (1)
- linux (8)
- Apache (6)
- cms (22)
- jsuc (10)
- html (3)
- css (1)
- 作图 (2)
- vs2012 (2)
- 编码转换 (12)
- work_unicode (1)
- work_webbrowser (1)
- work_trade_quotes_login (1)
- c#学习 (38)
- wpf学习 (31)
- wpf快速学习 (1)
- VB学习 (1)
- NSIS (4)
- log4cpp (3)
- 学习web (1)
- 经验 (1)
- c_汇编 (1)
最新评论
Free Heap block XXXXXX modified at XXXXXX after it was freed
相信不少朋友碰到过以上问题,而往往苦于无法定位到错误的代码位置,其实出现该问题一般就是使用了野指针导致的.
那么何为野指针呢?
野指针与NULL指针不同.所谓野指针是指指针所指的内存已经回收,而继续使用该指针,导致未定义行为.
例如:
[cpp] view plaincopy
char *p = new char[512];
*p = '/0';
delete[] p;
*p = 'a'; // 此处出现了野指针
所以为了避免此类问题。往往采用删除后立即清空指针变量的方法
[cpp] view plaincopy
delete []p;
p = NULL; // 进行置NULL
*p = 'a'; // 这里调试器将给出提示,成功定位错误位置
这样看似很好解决野指针的问题,其实不然,因为要知道内存删除与指针变量使用往往是脱节的。
例如:
[cpp] view plaincopy
char *p = new char[512];
char *q = p;
*p = '/0';
delete[] p;
p = NULL;
*q = 'a'; // q与内存删除代码往往不在同一地点,没办法指定q=NULL;所以照样出现了野指针。
那么此类问题如何定位呢?
这里就要利用文章开头写的那个提示信息了。
Free Heap block d49418 modified at d49574 after it was freed
这句话的意思是,释放了内存开始为0xd49418的堆块后,堆块所在内存的0xd49574位置被更改了。
这样就好办了,我们只需要查找到0xd49418所在位置属于分配给了哪个对象,然后再定位0xd49574所处的成员变量
然后查找所有使用该变量并进行了变量内容的修改的代码就可以定位到错误位置了。再根据情况修改代码,避免内存释放后仍然进行修改即可。
相信不少朋友碰到过以上问题,而往往苦于无法定位到错误的代码位置,其实出现该问题一般就是使用了野指针导致的.
那么何为野指针呢?
野指针与NULL指针不同.所谓野指针是指指针所指的内存已经回收,而继续使用该指针,导致未定义行为.
例如:
[cpp] view plaincopy
char *p = new char[512];
*p = '/0';
delete[] p;
*p = 'a'; // 此处出现了野指针
所以为了避免此类问题。往往采用删除后立即清空指针变量的方法
[cpp] view plaincopy
delete []p;
p = NULL; // 进行置NULL
*p = 'a'; // 这里调试器将给出提示,成功定位错误位置
这样看似很好解决野指针的问题,其实不然,因为要知道内存删除与指针变量使用往往是脱节的。
例如:
[cpp] view plaincopy
char *p = new char[512];
char *q = p;
*p = '/0';
delete[] p;
p = NULL;
*q = 'a'; // q与内存删除代码往往不在同一地点,没办法指定q=NULL;所以照样出现了野指针。
那么此类问题如何定位呢?
这里就要利用文章开头写的那个提示信息了。
Free Heap block d49418 modified at d49574 after it was freed
这句话的意思是,释放了内存开始为0xd49418的堆块后,堆块所在内存的0xd49574位置被更改了。
这样就好办了,我们只需要查找到0xd49418所在位置属于分配给了哪个对象,然后再定位0xd49574所处的成员变量
然后查找所有使用该变量并进行了变量内容的修改的代码就可以定位到错误位置了。再根据情况修改代码,避免内存释放后仍然进行修改即可。
发表评论
-
manifest
2015-06-08 17:57 1810我遇到的问题: 将 Upload.exe Upload.exe ... -
log4CPP多线程支持的缺角(一)(转)
2015-06-01 10:59 969log4CPP多线程支持的缺角 ... -
minizip压缩文件夹(转)
2015-06-01 10:26 2170#include <atlconv.h> / ... -
文件大小(转)
2015-06-01 10:08 466方法一: WIN32_FIND_DATA fi ... -
log4cpp环境变量
2015-05-13 15:32 647log4cplus.appender.DEBUG_MSG.Fi ... -
linux设置环境变量putenv() setenv() getenv()(转)
2015-05-13 15:28 1145linux设置环境变量putenv() setenv() ge ... -
VC学习:log4cpp
2015-05-12 15:37 764基于LGPL开源项目 Log4cpp ... -
VC异常:File:write.c Line:67
2015-05-12 15:29 713VC异常:File:write.c Line:67 路径没找 ... -
C++异常:rethrow【转】
2015-05-08 15:20 392C++异常rethrow【转】 http://se.csai. ... -
VC异常:Free Heap block xxxxxxxx modified at xxxxxxxx after it was freed(转)
2015-05-08 15:18 1057Free Heap block xxxxxxxx modifi ... -
VC中关于 0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值说明
2015-05-07 15:14 1079VC中关于 0xcccccccc、0xcdcdcdcd和 0x ... -
析构函数后,还可以调用函数成员
2015-05-07 15:13 849析构函数后,还可以调用函数成员 类的所有的函数成员的是编译时期 ... -
[size=medium] c,c#判断socket是否断开[/size]
2015-03-17 13:28 1072c,c#判断socke ... -
时间转换
2015-01-08 11:55 457时间转换 public static long DateT ... -
C++ localtime函数需要注意的地方
2015-01-08 11:42 982time_t tLast = pLastFQKLineIt ... -
TerminateThread
2014-11-13 14:04 653TerminateThread. 如线程内部不涉及空间开辟, ... -
VC退出线程的方法(转载)
2014-10-23 17:39 671VC退出线程的方法 标题很简单,但是要讨论的地方不少; ... -
创建文件夹CreateDirectoryA(file, 0);
2014-10-23 17:19 1469创建文件夹CreateDirectoryA(file, 0) ... -
heap corruption detected错误解决方法调试方法以及内存管理相关(转载)
2014-10-23 16:57 1071heap corruption detected错误解决方法调 ... -
edit control字体背景颜色
2014-10-23 16:56 683edit control字体背景颜色 属性必须 readon ...
相关推荐
java.lang.OutOfMemoryError: Java heap space 解决方法
解决报错HEAP CORRUPTION DETECTED heap corruption detected after normal block.zip
搜集整理关于java错误处理:java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError: Java heap space 资料整理
博客代码 Free Heap block XXXX modified at XXXX after it was freed 的处理 的例子
java虚拟机OutOfMemoryError:Java heap space堆dump文件,可以直接用来分析。
记录java.lang.OutOfMemoryError:Java heap space的情况 文章内容: 一.问题描述+原因分析+解决方案 二.JVM调优说明 三.Tomcat添加到jvisualvm监控
NULL 博文链接:https://geyubin.iteye.com/blog/779330
报错 java.lang.OutOfMemoryError: Java heap 启动报错java.lang.ClassNotFoundException: 1catalina.org.apache.juli.FileHandler JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -...
Myeclipse下java.lang.OutOfMemoryError Java heap space的解决
java解决nested exception is java.lang.OutOfMemoryError Java heap space 解决OOM
oracle:Heap size 3597K exceeds notification threshold 解决方法
编译时出现java.lang.OutOfMemoryError Java heap space异常.
java.lang.OutOfMemoryError: Java heap space 解决方法
--------------------------------------------介绍adobe reader的堆管理,很不错的研究成果。
解决Java_heap_space问题
最大堆Max Heap算法在Java中的实现
fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit Generating Code... fatal error C1076: compiler limit : internal heap limit reached; use /Zm to ...
java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法java[1].lang.OutOfMemoryError_Java_heap_space错误及处理办法
this is the implementation of heap data structure