XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
来源:互联网 发布:mc mac版联机 编辑:程序博客网 时间:2024/09/21 08:56
心情大爽,解决掉一个存在很久让我抓狂的BUG!!!
其实是重复调用了析构函数。
错误信息:XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
是在我点一个按钮想销除原有的数据时候出现在中断错误。
通过调用堆栈,找到最后出错代码是这段:
CMultiAgent::~CMultiAgent(void){int nodenum;for(nodenum=0;nodenum<m_nNodeNum;nodenum++){node[nodenum].~CNode();}delete [] node;laplacianMtx.~CMatrix();}
其中,laplacianMtx是我自己写的一个CMatrix类的对象。下面m是CMatrix类用来保存矩阵的一个二维数组。laplacianMtx本身是CMultiAgent类的一个成员变量。
CMatrix::~CMatrix(void){for(row=0;row<ROW;row++){delete [] m[row];}delete [] m;}
一步步调试,发现在~CMultiAgent中m[row]的地址变成了红色的0xfeeefeee,又看错误信息是0xfeeefee8访问冲突,问题肯定是在这里了。
调用laplacianMtx.~CMatrix()并无问题,成功的把laplacianMtx.m销除了,但是再继续就出错,即跳出CMultiAgent::~CMultiAgent(void)时候出错。
困扰很多天,查了下地址,指针0xfeeefeee的含意,具体可见http://blog.csdn.net/shuilan0066/article/details/7890691
转:【
测试时,遇到程序崩溃
调试时,发现崩溃处的某指针值为0xfeeefeee,此值的含义为: 此指针指向的位置已经被释放了, 但释放后,又错误的重新调用了这个无效指针。
经检查,错误之处为:
- TB_Chosen->ReleaseAll();
- delete TB_Chosen;
- m_paTextBox.RemoveAt(nIndex);
- TB_Chosen->Update(); //TB_Chosen 已经在前面释放了,但此处又调用,因此出现了错误
- TB_Chosen->UpdateCaret();
TB_Chosen->ReleaseAll();delete TB_Chosen;m_paTextBox.RemoveAt(nIndex);TB_Chosen->Update(); //TB_Chosen 已经在前面释放了,但此处又调用,因此出现了错误TB_Chosen->UpdateCaret();
总结,0xfeeefeee的含义为: 指针指向的空间已经被DELETE释放掉,但程序在未给该指针重新赋值前,又错误的调用了这个无效的指针
】
此时恍然大悟,laplacianMtx本就是CMultiAgent的成员,调用~CMultiAgent()时候会自动调用其成员变量laplacianMtx的析构函数~CMatrix(void),而我在此之前手动调用了析构函数,就造成了自动调用析构函数时候找不到CMultiAgent.m的地址,所以出错。
修改过后一切妥妥的了
CMultiAgent::~CMultiAgent(void){int nodenum;for(nodenum=0;nodenum<m_nNodeNum;nodenum++){node[nodenum].~CNode();}delete [] node;//laplacianMtx.~CMatrix(); //注释掉这句}
- XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
- 0x0fad13af (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000002 时发生访问冲突
- 求助帖~.exe 中的 0x10022897 (libcocos2d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突
- ...... 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- 0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。
- (转载)0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。
- 中的 0x00833257 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突
- 10_2_4.exe 中的 0x00b0d00a 处有未经处理的异常: 0xC0000005: 读取位置 0xccccccc0 时发生访问冲突
- 【语言-C++】Image - .exe 中的 0x0043a998 处有未经处理的异常: 0xC0000005: 读取位置 0x029d846c 时发生访问冲突
- OSG 有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突
- 0x00AE18F8 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
- 0x5afd57aa处有未经处理的异常:0xC0000005:读取位置0xcdcdcdc1时发生访问冲突
- 0x00007FF7C49A4C42 处有未经处理的异常:0xC0000005: 读取位置 0x000001481A2D86C4 时发生访问冲突
- 有未经处理的异常: 0xC0000005: 写入位置 0x01260000 时发生访问冲突
- xxx.exe 中的 0x005d93af (sss.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 链接库加载,“”(*.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x40B9CA00 时发生访问冲突”的问题所在
- VS2012 msvcr110d.dll xxxxxx处有未经处理的异常:0xC0000005:写入位置xxxxxx时发生访问冲突(scanf_s引起)-已解决
- Ognl表达式
- 自定义dialog+swich合用
- 如何让new操作符不分配内存,只调用构造函数
- Usb设备驱动0:从usb设备被发现开始
- Jackson
- XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
- makefile
- vc创建对话框
- 线程的一些知识
- NP完全问题
- java常用方法
- 数据库架构的演变
- 《Linux命令行与shell脚本编程大全》 第二十章 学习笔记
- 查找Excel使用公式的单元格