hur.cn - 华软网

 热门搜索

MFC,报Debug Assertion Failed!错误

  作者:未知    来源:网络    更新时间:2010/1/4
搞了一个Button,函数为void CBankAccural::OnGg() 
{CString Cstr,Cstr1;MessageBox("g更新成功");}
出现Program:D\Debug\banksystem.exe
File:dbgherp.c
Line:1011
Ecpression:_CrtIsValidHeapPointer(pUserData)
for information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts. 

调试时,执行完CBankAccural::OnGg() 便出现
user breakpoint caued from code at 0x7c92120e
点确定后便看到 0x7c92120e int 3
继续,到,7c92130f ret 再到
7C98E0D9   mov   byte ptr ds:[7C9A1D79h],0
最后到这个就出现问题
1021236B   call        _CrtDbgReport (10213930)

---华软 网友回答---
看看对应的assert之前的注释,很显然你尝试释放的指针是非法的。你应该看看你尝试释放的指针是否是你new出来的,如果是new出来的,你释放时的值是否是等于new时的值,是否是你修悔改指针的值

/*
         * If this ASSERT fails, a bad pointer has been passed in. It may be
         * totally bogus, or it may have been allocated from another heap.
         * The pointer MUST come from the 'local' heap.
         */
        


---华软网友回复---
断言毛病大多数都是空指针酿成的。

---华软网友回复---
这没有事理,谁告诉你的?!


引用 2 楼 yschenwei 的回复:
断言毛病大多数都是空指针酿成的。

---华软网友回复---
没有啊,我就建了一个工程,就加了这个void CBankAccural::OnGg() 
{CString Cstr,Cstr1;MessageBox("g更新成功");} 

---华软网友回复---
是个什么工程,exe照旧dll,这个按钮是在编辑界面加的,照旧用代码动态生成的啊?
消息措置惩罚函数是通过classwizard菜单生成的么?

---华软网友回复---
将字符串变量初始化,看看

C++">
CString Cstr  = _T("");
CString Cstr1 = _T("");

---华软网友回复---
引用 2 楼 yschenwei 的回复:
断言毛病大多数都是空指针酿成的。


或 指针未定义指向,便运用
---华软网友回复---
引用 2 楼 yschenwei 的回复:
断言毛病大多数都是空指针酿成的。


断言都是由ASSERT来产生的,你自己写一个ASSERT(FALSE)都是一个断言


你这个应该是释放指针的时候犯错了
检查你的指针等内容
---华软网友回复---
工程是exe,这个按钮是在编辑界面加的,
其它的什么也没动啊?
又不想重装
---华软网友回复---
程序内存数据可能改写了,
欠好调试,能够试试数据断点,
---华软网友回复---

试试:

CString Cstr,Cstr1;AfxMessageBox(_T("g更新成功"));}


引用 4 楼 icehuangb 的回复:
没有啊,我就建了一个工程,就加了这个void CBankAccural::OnGg()
{CString Cstr,Cstr1;MessageBox("g更新成功");}

---华软网友回复---
哎,我也遇到一样的问题,在原本的exe界面上增加一个按钮,编译时没有毛病,运行后,按下按钮,出现和楼主一样的毛病,然则如果新建一个工程,增加一个按钮,一样的程序,为什么没有报错呢?求高手帮助啊!      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。