ASSERT(ContinueModal());的时候报Debug Assertion Fail

来源:互联网 发布:机器语言编程 编辑:程序博客网 时间:2024/05/22 08:06

一个MFC的程序,类似资源管理器,我需要在原来程序的基础上做些修改.  
  结果修改后,出现在wincore.cpp的3487行中出现assert错误  
  调试之后,跳到这里:  
  ASSERT(ContinueModal());  
   
  Call   Stack的情况是:  
  CWnd::RunModalLoop(unsigned   long   4)   line   3486   +   34   bytes  
  CDialog::DoModal()   line   539   +   12   bytes  
  ……  
  ……  
   
  有没有遇到类似情况的兄弟们  
  麻烦告诉我一下可能的原因  
  thanks  
   
   
  问题点数:100、回复次数:9Top

1 楼aceouter(outer)回复于 2006-03-08 15:32:27 得分 10

代码贴出来看看Top

2 楼gold_water(风雨无阻)回复于 2006-03-08 16:23:56 得分 5

可能是溢出了.建议再仔细检查一下代码Top

3 楼gold_water(风雨无阻)回复于 2006-03-08 16:26:13 得分 0

可能是溢出了.建议再仔细检查一下代码Top

4 楼syy64(太平洋)回复于 2006-03-08 16:44:44 得分 5

调试看看,从你的程序的哪一行进去的。Top

5 楼lumber(今天的祝福 明天的孤独)回复于 2006-03-08 17:26:00 得分 0

CDialog::DoModal()   之后,开启了一个线程做了一些操作,也没有什么特别的操作Top

6 楼lumber(今天的祝福 明天的孤独)回复于 2006-03-08 17:33:51 得分 0

CLinkDlg继承CDialog,下面是代码  
   
  DWORD   WINAPI   LinkThread(LPVOID   lpParameter)  
  {  
          //这个线程做了点事情,成功的话就发一个LINKOK的消息  
          SendMessage(((CLinkDlg*)lpParameter)->GetSafeHwnd(),   LINKOK,   0,   NULL);  
   
  }  
   
  CLinkDlg::CLinkDlg(CWnd*   pParent   /*=NULL*/)   :   CDialog(CLinkDlg::IDD,   pParent)  
  {  
          //初始化  
  }  
   
   
  BOOL   CLinkDlg::OnInitDialog()    
  {  
          //创建了个线程  
          ::CreateThread(NULL,   0, LinkThread,   (LPVOID)this,   0,   &m_dwThreadID);          
  }  
  void   CLinkDlg::OnLinkOK(WPARAM   wParam,LPARAM   lParam)  
  {  
          //收到了LINK_OK的消息后到了这里  
  CDialog::OnOK();  
  }  
   
  void   CLinkDlg::OnCancel()    
  {  
          //取消那个线程  
  CDialog::OnCancel();  
  }  
   
  Top

7 楼newcore(to be or not to be, it's a question.)回复于 2006-03-08 18:19:14 得分 40

感觉是线程启动后,就发送一个消息给对话框,然后对话框由于某种原因被非法关闭。(资源没有释放,或者还在做其他事情,但是却没有作完???)  
   
  个人觉得,这里对话框的生命周期和线程中止时机最好有个同步机制...  
   
   
  Top

8 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2006-03-08 18:39:20 得分 40

SendMessage  
  =>  
  PostMessageTop

9 楼lumber(今天的祝福 明天的孤独)回复于 2006-03-13 09:26:38 得分 0

SendMessage   改成   PostMessage   就可以了,不会在出现那个assert  
  多谢各位 

原创粉丝点击