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及上面的朋友们。
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及上面的朋友们。
相关文章推荐
- 0x0fad13af (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000002 时发生访问冲突
- XXX.exe 中的 0x5404723c (msvcr100d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefee8 时发生访问冲突
- 【vs调试】C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- XXX中的 0x77da15de 处未处理的异常: 0xC0000005: 读取位置 0x00000001 时发生访问冲突
- VS2005 编译的exe运行出现 0x00905a4d 处未处理的异常: 0xC0000005: 读取位置 0x00905a4d时发生访问冲突
- 服务程序出现:未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 【语言-C++】Image - .exe 中的 0x0043a998 处有未经处理的异常: 0xC0000005: 读取位置 0x029d846c 时发生访问冲突
- 在调试时出现:~处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- 处有未经处理的异常: 0xC0000005: 读取位置 0xcccccccc 时发生访问冲突
- 中的 0x00833257 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突
- 0x0F1AFD76 (libcocos2d.dll) (Plane.exe 中)处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突。
- “XXX.exe 中的 0xXXXXXXXX处未处理的异常: 0xC0000005: 读取位置 0xXXXXXXXX 时发生访问冲突”的一种解决方案
- 未处理的异常: 0xC0000005: 读取位置 0x0000234c 时发生访问冲突 内存错误
- 内存错误 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 10_2_4.exe 中的 0x00b0d00a 处有未经处理的异常: 0xC0000005: 读取位置 0xccccccc0 时发生访问冲突
- 有未经处理的异常: 0xC0000005: 读取位置 0xFFFFFFFC 时发生访问冲突
- xx.exe 中的 0x014180bd 处有未经处理的异常: 0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突(当指针访问异常时,应考虑是不是对象未创建)。
- 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- C/C++ 错误处理(文档):未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- 未处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突