XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
2013-09-24 18:02
603 查看
心情大爽,解决掉一个存在很久让我抓狂的BUG!!!
其实是重复调用了析构函数。
错误信息:XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
是在我点一个按钮想销除原有的数据时候出现在中断错误。
通过调用堆栈,找到最后出错代码是这段:
其中,laplacianMtx是我自己写的一个CMatrix类的对象。下面m是CMatrix类用来保存矩阵的一个二维数组。laplacianMtx本身是CMultiAgent类的一个成员变量。
一步步调试,发现在~CMultiAgent中m[row]的地址变成了红色的0xfeeefeee,又看错误信息是0xfeeefee8访问冲突,问题肯定是在这里了。
调用laplacianMtx.~CMatrix()并无问题,成功的把laplacianMtx.m销除了,但是再继续就出错,即跳出CMultiAgent::~CMultiAgent(void)时候出错。
困扰很多天,查了下地址,指针0xfeeefeee的含意,具体可见http://blog.csdn.net/shuilan0066/article/details/7890691
转:【
测试时,遇到程序崩溃
调试时,发现崩溃处的某指针值为0xfeeefeee,此值的含义为: 此指针指向的位置已经被释放了, 但释放后,又错误的重新调用了这个无效指针。
经检查,错误之处为:
[cpp]
view plaincopyprint?
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的地址,所以出错。
修改过后一切妥妥的了
其实是重复调用了析构函数。
错误信息: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,此值的含义为: 此指针指向的位置已经被释放了, 但释放后,又错误的重新调用了这个无效指针。
经检查,错误之处为:
[cpp]
view plaincopyprint?
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(); //注释掉这句 }
相关文章推荐
- 0x0fad13af (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000002 时发生访问冲突
- xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。
- “XXX.exe 中的 0xXXXXXXXX处未处理的异常: 0xC0000005: 读取位置 0xXXXXXXXX 时发生访问冲突”的一种解决方案
- xxx.exe 中的 0x005d93af (sss.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- (转载)0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。
- 0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。
- 【语言-C++】Image - .exe 中的 0x0043a998 处有未经处理的异常: 0xC0000005: 读取位置 0x029d846c 时发生访问冲突
- VS2005 编译的exe运行出现 0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a4d时发生访问冲突
- OSG 有未经处理的异常: 0xC0000005: 读取位置 0xcdcdcdcd 时发生访问冲突
- 0x0FA23F7D (ucrtbased.dll)处(位于.exe 中)引发的异常: 0xC0000005: 读取位置 0x0000012C 时发生访问冲突。
- 0x657ac2b2 (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突
- 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- XXX中的 0x77da15de 处未处理的异常: 0xC0000005: 读取位置 0x00000001 时发生访问冲突
- 链接库加载,“”(*.exe 中)处有未经处理的异常: 0xC0000005: 写入位置 0x40B9CA00 时发生访问冲突”的问题所在
- 0x00AE18F8 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
- ...... 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- 有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFC 时发生访问冲突
- 10_2_4.exe 中的 0x00b0d00a 处有未经处理的异常: 0xC0000005: 读取位置 0xccccccc0 时发生访问冲突
- 中的 0x00833257 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突
- 在调试时出现:~处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突