请高手看看这个错误是怎么回事? CAssoc* pAssoc;pAssoc = new CAssoc ;我认为应该是没有分配的问题。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里的代码是MFC底层的用来实现窗口管理的程序,我的程序可一点都没有用到什么CMapPtrToPtr,也没用到CHandleMap,我只是用了GetParent() 不要把pAssoc != NULL 作为条件,指针除非你显式赋予空值,否则不会为NULL。问题是不是处在这个数租m_pHashTable,看看它是怎么来的,元素是否有效 呵呵!低级错误。for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext)不能使用pAssoc != NULL作为条件呀,应该使用pAssoc->pNext != NULL作为条件,因为循环中使用的是pAssoc->pNext呀!!! 我都说过了,这是MFC的源程序,他自有它的道理,大家还是看看别的地方吧 哦,刚才没有看清楚,呵呵,你是要自己写界面吗?CAppButton是个什么东西?是个自己写的按钮类?可能因为你用的哪个CButton是个临时的已经被系统给删掉了,hWnd存在,但是没有CButton和他关联,所以就不能使用CButton的GetParent()函数,建议你用API的 ::GetParent() 程序中是否使用了多线程? 凭感觉好象是在线程间传递了CWnd类. to han012: 没有使用多线程 我改掉了,没用GetParent,直接将parent指针传过去,但是还是这样的错误 函数调用如下:CMapPtrToPtr::GetValueAt(void * 0x001e0a2e) line 188 + 3 bytesCHandleMap::LookupPermanent(void * 0x001e0a2e) line 90 + 22 bytesCWnd::FromHandlePermanent(HWND__ * 0x001e0a2e) line 303 + 12 bytes_AfxCbtFilterHook(int 3, unsigned int 1968686, long 1237800) line 530 + 9 bytesUSER32! 77dfe832()USER32! 77dfbf45()NTDLL! 77f9f04b()USER32! 77dfbf75()CWnd::CreateEx(unsigned long 0, const char * 0x0051adac, const char * 0x004fd210 `string', unsigned long 1342177371, int 0, int 23, int 41, int 41, HWND__ * 0x00120858, HMENU__ * 0x00002710, void * 0x00000000) line 694 + 54 bytesCWnd::Create(const char * 0x0051adac, const char * 0x004fd210 `string', unsigned long 1342177371, const tagRECT & {top=23 bottom=64 left=0 right=41}, CWnd * 0x0012fda4 {CTLChoice hWnd=0x00120858}, unsigned int 10000, CCreateContext * 0x00000000) line 743CButton::Create(const char * 0x004fd210 `string', unsigned long 1342177371, const tagRECT & {top=23 bottom=64 left=0 right=41}, CWnd * 0x0012fda4 {CTLChoice hWnd=0x00120858}, unsigned int 10000) line 50CAppButton::CreateShort(const CRect & {top=23 bottom=64 left=0 right=41}, CWnd * 0x0012fda4 {CTLChoice hWnd=0x00120858}, CAppButton * 0x011f6ebc {CAppButton hWnd=0x001508cc}) line 582 把你的 CreateShort 函數貼出來. 问题在CreateShort(...)里面,程序中某个hWnd被破坏! 还是多粘些你的代码吧,这次没有用GteParent()函数都出错了,肯定是你的CAppButton::CreateShort函数有问题!! // 该函数根据已有的一个CAppButton *pButton 创建新的CAppButton,然后我会delete旧的void CAppButton::CreateShort(const CRect& rc, CWnd* pWnd, CAppButton *pButton){ Create(_T(""),WS_CHILD|WS_VISIBLE|BS_ICON|WS_EX_ACCEPTFILES|BS_OWNERDRAW, rc,pWnd,m_nCtrlID++); // m_nCtrlID 是静态成员变量,自动加一 m_pParent = (CTLChoice*)pWnd; // CTLChoice是个CTabCtrl类 m_sAppID.Format("%d",m_nCtrlID); CIniFile::EqualTo(&m_Ei,&(pButton->m_Ei)); SetValid(pButton->IsValid()); if(HasDes()) { m_pParent->AddTool(this,m_Ei.Des); } DragAcceptFiles();}//===========================================================顺便问一句, m_ppButton = new CAppButton* [m_nChoiceCount]; for(INT nChoice=0; nChoice<m_nChoiceCount; nChoice++) m_ppButton[nChoice]=new CAppButton [nCount];这样创建一个二维的AppButton数组对吗?然后Delete 时 for(INT nChoice=0; nChoice<m_nChoiceCount; nChoice++) delete []m_ppButton[nChoice] delete []m_ppButton;上面的代码是否正确 我认为不对,起码不符合 二维数组的定义, m_ppButton[a][b] 能得到正确值吗? ( 我没测试过 ) 可以得到正确值!!我有疑问的是delete有无问题===============================================申明:!!!!!!!!!!!!!!1希望大家看看这个错误如何解决,后面的问题我是供参考的 对不起我不熟悉你说的着几个西东。我觉得delete []m_ppButton[nChoice];有问题,这样试试:for(INT nChoice=0; nChoice<m_nChoiceCount; nChoice++) delete m_ppButton[nChoice];delete[] XXX就把整个数组清除了。 为什么我的程序只能注入到控制台的程序 用ConvertBSTRToString出现的内存泄露问题 运算符重载碰到的疑惑 静态类如何写? 请问高手,怎么删除文件里的一段内容呢? 请问什么是缓冲区?什么是流(如字节流,字符流等)?能否形象解释以下,谢谢! 敬请高手指教:想做一个类似瑞星防火墙式的程序,运行时常驻内存,只在任务栏的右方显示图标,如何实现??在线等,多谢!! 请问在创建一个对话框实体过程当中,什么时候触发ON_WM_INITDIALOG消息? 非编程的编程问题 ADO中怎样得知返回的记录集中记录的数目? 为什么对话框弹不出来? 菜的问题:模态对话框在那里初始变量?问题解决,马上给分!
问题是不是处在这个数租m_pHashTable,看看它是怎么来的,元素是否有效
for (pAssoc = m_pHashTable[nHash]; pAssoc != NULL; pAssoc = pAssoc->pNext)
不能使用pAssoc != NULL作为条件呀,应该使用pAssoc->pNext != NULL作为条件,因为循环中使用的是pAssoc->pNext呀!!!
没有使用多线程
CMapPtrToPtr::GetValueAt(void * 0x001e0a2e) line 188 + 3 bytes
CHandleMap::LookupPermanent(void * 0x001e0a2e) line 90 + 22 bytes
CWnd::FromHandlePermanent(HWND__ * 0x001e0a2e) line 303 + 12 bytes
_AfxCbtFilterHook(int 3, unsigned int 1968686, long 1237800) line 530 + 9 bytes
USER32! 77dfe832()
USER32! 77dfbf45()
NTDLL! 77f9f04b()
USER32! 77dfbf75()
CWnd::CreateEx(unsigned long 0, const char * 0x0051adac, const char * 0x004fd210 `string', unsigned long 1342177371, int 0, int 23, int 41, int 41, HWND__ * 0x00120858, HMENU__ * 0x00002710, void * 0x00000000) line 694 + 54 bytes
CWnd::Create(const char * 0x0051adac, const char * 0x004fd210 `string', unsigned long 1342177371, const tagRECT & {top=23 bottom=64 left=0 right=41}, CWnd * 0x0012fda4 {CTLChoice hWnd=0x00120858}, unsigned int 10000, CCreateContext * 0x00000000) line 743
CButton::Create(const char * 0x004fd210 `string', unsigned long 1342177371, const tagRECT & {top=23 bottom=64 left=0 right=41}, CWnd * 0x0012fda4 {CTLChoice hWnd=0x00120858}, unsigned int 10000) line 50
CAppButton::CreateShort(const CRect & {top=23 bottom=64 left=0 right=41}, CWnd * 0x0012fda4 {CTLChoice hWnd=0x00120858}, CAppButton * 0x011f6ebc {CAppButton hWnd=0x001508cc}) line 582
void CAppButton::CreateShort(const CRect& rc, CWnd* pWnd, CAppButton *pButton)
{
Create(_T(""),WS_CHILD|WS_VISIBLE|BS_ICON|WS_EX_ACCEPTFILES|BS_OWNERDRAW,
rc,pWnd,m_nCtrlID++); // m_nCtrlID 是静态成员变量,自动加一 m_pParent = (CTLChoice*)pWnd; // CTLChoice是个CTabCtrl类
m_sAppID.Format("%d",m_nCtrlID);
CIniFile::EqualTo(&m_Ei,&(pButton->m_Ei)); SetValid(pButton->IsValid());
if(HasDes())
{
m_pParent->AddTool(this,m_Ei.Des);
}
DragAcceptFiles();
}
//===========================================================
顺便问一句,
m_ppButton = new CAppButton* [m_nChoiceCount];
for(INT nChoice=0; nChoice<m_nChoiceCount; nChoice++)
m_ppButton[nChoice]=new CAppButton [nCount];
这样创建一个二维的AppButton数组对吗?
然后Delete 时
for(INT nChoice=0; nChoice<m_nChoiceCount; nChoice++)
delete []m_ppButton[nChoice]
delete []m_ppButton;
上面的代码是否正确
我有疑问的是delete有无问题
===============================================
申明:!!!!!!!!!!!!!!1
希望大家看看这个错误如何解决,后面的问题我是供参考的
我觉得delete []m_ppButton[nChoice];有问题,这样试试:for(INT nChoice=0; nChoice<m_nChoiceCount; nChoice++)
delete m_ppButton[nChoice];delete[] XXX就把整个数组清除了。