打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
DoModal - msvcr80d.dll–处未处理的异常: 0xC0000005

转自:http://www.dakaren.com/index.php/archives/358.htm/page/3/

本人出现的中断错误:

AudioManager.exe 中的 0x657ac2b2 (msvcr80d.dll) 处未处理的异常: 0xC0000005: 读取位置 0xccccccc8 时发生访问冲突

网上类似的帖子介绍:

开发环境 VS2005 + MFC基于对话框的工程


BOOL CVideoMFCApp::InitInstance()
{
    // 如果一个运行在 Windows XP 上的应用程序清单指定要
    // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
    //则需要 InitCommonControlsEx()。否则,将无法创建窗口。
    INITCOMMONCONTROLSEX InitCtrls;
    InitCtrls.dwSize = sizeof(InitCtrls);
    // 将它设置为包括所有要在应用程序中使用的
    // 公共控件类。
    InitCtrls.dwICC = ICC_WIN95_CLASSES;
    InitCommonControlsEx(&InitCtrls);

    CWinApp::InitInstance();

#ifdef _AFXDLL
    Enable3dControls();            // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();    // Call this when linking to MFC statically
#endif

    int w = GetSystemMetrics(SM_CXSCREEN);
    int h = GetSystemMetrics(SM_CYSCREEN);

    // 标准初始化
    // 如果未使用这些功能并希望减小
    // 最终可执行文件的大小,则应移除下列
    // 不需要的特定初始化例程
    // 更改用于存储设置的注册表项
    // TODO: 应适当修改该字符串,
    // 例如修改为公司或组织名
    SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

    CVideoMFCDlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        // TODO: 在此放置处理何时用
        //  “确定”来关闭对话框的代码
    }
    else if (nResponse == IDCANCEL)
    {
        // TODO: 在此放置处理何时用
        //  “取消”来关闭对话框的代码
    }

    // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
    //  而不是启动应用程序的消息泵。
    return FALSE;
}

点击中断跳到:

*---------------------------------------------------------------------------
 *
 * Memory management
 *
 --------------------------------------------------------------------------*/

/***
*static int CheckBytes() - verify byte range set to proper value
*
*Purpose:
*       verify byte range set to proper value
*
*Entry:
*       unsigned char *pb       - pointer to start of byte range
*       unsigned char bCheck    - value byte range should be set to
*       size_t nSize            - size of byte range to be checked
*
*Return:
*       TRUE - if all bytes in range equal bcheck
*       FALSE otherwise
*
*******************************************************************************/
extern "C" static int __cdecl CheckBytes(
        unsigned char * pb,
        unsigned char bCheck,
        size_t nSize
        )
{
        int bOkay = TRUE;
        while (nSize--)
        {
           if (*pb++ != bCheck)      //》中断点 
            {
/* Internal error report is just noise; calling functions all report results - JWM */
/*              _RPT3(_CRT_WARN, "memory check error at 0x%p = 0x%02X, should be 0x%02X.\n", */
/*                    (BYTE *)(pb-1),*(pb-1), bCheck); */
                bOkay = FALSE;
            }
        }
        return bOkay;
}

上述加粗红色代码运行时报错,大部分代码都是自动生成的
报错提示“Debug assertion failed ” 报错具体执行代码是
安装目录下的 dlgdata.cpp 的 40行 ,下面代码中加粗红色部分

网上的讨论:

运行到INT_PTR nResponse = dlg.DoModal();出错
跟进去以后,发现具体位置在ASSERT(FALSE);这里

检查下是否你把资源中的某个控件删除了?
并且DoDataExchange还在使用这个控件的ID。

如果是这样的话,解决的方法就是,查找这里nIDC的值对应的ID的DEFINE,看看是否在DoDataExchange使用。

并且此ID无相关的在.rc文件中的定义。

C/C++ code
pSite = m_pDlgWnd->GetOleControlSite(nIDC);
      if (pSite == NULL)
      {
           TRACE(traceAppMsg, 0, "Error: no data exchange control with ID 0x%04X.\n", nIDC);
          ASSERT(FALSE);
          AfxThrowNotSupportedException();
      }

》》》》》》》》》》》》》》》》》》》》》》》
本人是怎样解决问题的:
本人出现过上面的问题,程序编译一直是正确的,但运行总是不能显示对话框,显示如题所示错误。
根据csdn上面的说明,找出问题是resource.h里的几个ID的关系,有ID没有用过的删除掉,然后在资源的rc文件里面对应部分报错,找出来删掉即可。
花了几天时间终于搞定这个问题了,谢谢csdn及上面的朋友们。

=================================================

http://zhidao.baidu.com/question/252207188.html

Cgoods_inDlg dlg;
this->ShowWindow(SW_HIDE);
dlg.DoModal();
this->ShowWindow(SW_SHOW);
问题出现在第二个this,调试的时候,到了第一个this,this的指针指向:
0x0012f544{Cmain_Dlg hWnd=0x000709ee}
到了第二个this,就变成了:
0x0012f544{Cmain_Dlg hWnd=???}

同样一个文件,有其他类似的代码:例如
Cgoods_outDlg dlg;
this->ShowWindow(SW_HIDE);
dlg.DoModal();
this->ShowWindow(SW_SHOW);
调试的时候两个this的值都是一样的!

如果没有调试,那么当执行到上边错误的第二个this的时候,程序自动关闭了,也没有出现提示任何信息!仅仅是安安静静的关闭了

------------------------
这个问题我已经解决了!原因是我重装了系统,然后装vc++6.0的时候出现错误了!以上原来的代码是一点问题都没有的!
如果在不重装正确的vc++6.0的情况下,可以通过建立一个this相应的对象指针temp,然后temp=this
最后temp->ShowWindow(SW_SHOW);问题就解决了!不过后续的问题很多,因为本身是vc++6.0的问题!

(###)

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
做个启动窗体
VS2010/MFC编程入门之十一(对话框:模态对话框及其弹出过程)
隐藏窗口
VC中模态与非模态对话框的显示与关闭
VC++模态对话框和非模态对话框 | 求索阁
DoModal()用法及原理(转载)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服