您的位置:首页 > 其它

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

2012-03-06 21:22 399 查看
开发环境 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及上面的朋友们。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐