0x00000000处未处理的异常 0xc0000005 读取位置0x00000000时发生访问冲突

echomylove 2009-02-08 11:53:36
我用VC.net 2003写了MFC程序,调试编译运行都没问题,就是在关闭调试中的程序的时候会出现“0x00000000处未处理的异常 0xc0000005 读取位置0x00000000时发生访问冲突”的错误提示。
然后点击[中断],程序回到反汇编的地址显示:
。。。
。。。
00000000 ???
00000001 ???
00000002 ???
00000003 ???
00000004 ???
00000005 ???
00000006 ???
00000007 ???
00000008 ???
00000009 ???
0000000A ???
0000000B ???
0000000C ???
。。。
。。。
我想问下这是什么错误呢,怎么修改,望高手赐教!谢谢!
...全文
23112 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy6029 2012-07-06
  • 打赏
  • 举报
回复
继续搜索了一下,发现了下面这个帖子
http://topic.csdn.net/u/20080516/04/b196e3a7-c31e-480e-90f8-0e5084f7e7a6.html
然后试了最简单的一个方法,rebuilt了一下,问题解决了~~~
happy6029 2012-07-06
  • 打赏
  • 举报
回复
我正在遇到这个问题,然后搜索到这里了,跟17楼说的一样。出现这个问题的原因是我不小心删除了对话框的资源,后来我重新把对话框添加进去之后,编译没错,运行就报这个错误了。楼主有没有解决这个问题啊???
energybody1121 2012-05-07
  • 打赏
  • 举报
回复


BOOL COwnerDrawButtonApp::InitInstance()
{
// 假如應用程式資訊清單指定使用 ComCtl32.dll 6 (含) 以後版本,
// 來啟動視覺化樣式,在 Windows XP 上,則需要 InitCommonControls()。
// 否則任何視窗的建立都將失敗。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 設定要包含所有您想要用於應用程式中的
// 通用控制項類別。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);

CWinApp::InitInstance();

if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}

// 初始化 OLE 程式庫
if (!AfxOleInit())
{
AfxMessageBox(IDP_OLE_INIT_FAILED);
return FALSE;
}

AfxEnableControlContainer();

// 標準初始設定
// 如果您不使用這些功能並且想減少
// 最後完成的可執行檔大小,您可以
// 從下列程式碼移除不需要的初始化常式,
// 變更儲存設定值的登錄機碼
// TODO: 您應該適度修改此字串
// (例如,公司名稱或組織名稱)
SetRegistryKey(_T("本機 AppWizard 所產生的應用程式"));
// 剖析 Automation 或 reg/unreg 參數的命令列。
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);

// 已使用 /Embedding 或 /Automation 參數啟動應用程式。
// 將應用程式當做 Automation 伺服器執行。
if (cmdInfo.m_bRunEmbedded || cmdInfo.m_bRunAutomated)
{
// 經由 CoRegisterClassObject() 登錄類別因數。
COleTemplateServer::RegisterAll();
}
// 已使用 /Unregserver 或 /Unregister 參數啟動應用程式。
// 從登錄移除項目。
else if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppUnregister)
{
COleObjectFactory::UpdateRegistryAll(FALSE);
AfxOleUnregisterTypeLib(_tlid, _wVerMajor, _wVerMinor);
return FALSE;
}
// 已單獨或搭配其他參數 (如 /Register 或 /Regserver) 啟動應用程式。
// 更新登錄項目,包括型別程式庫。
else
{
COleObjectFactory::UpdateRegistryAll();
AfxOleRegisterTypeLib(AfxGetInstanceHandle(), _tlid);
if (cmdInfo.m_nShellCommand == CCommandLineInfo::AppRegister)
return FALSE;
}

COwnerDrawButtonDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置於使用 [確定] 來停止使用對話方塊時
// 處理的程式碼
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置於使用 [取消] 來停止使用對話方塊時
// 處理的程式碼
}

// 因為已經關閉對話方塊,傳回 FALSE,所以我們會結束應用程式,
// 而非提示開始應用程式的訊息。
return FALSE;
}

int AFXAPI AfxWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine, int nCmdShow)
{
ASSERT(hPrevInstance == NULL);

int nReturnCode = -1;
CWinThread* pThread = AfxGetThread();
CWinApp* pApp = AfxGetApp();

// AFX internal initialization
if (!AfxWinInit(hInstance, hPrevInstance, lpCmdLine, nCmdShow))
goto InitFailure;

// App global initializations (rare)
if (pApp != NULL && !pApp->InitApplication())
goto InitFailure;

// Perform specific initializations
if (!pThread->InitInstance())
{
if (pThread->m_pMainWnd != NULL)
{
TRACE(traceAppMsg, 0, "Warning: Destroying non-NULL m_pMainWnd\n");
pThread->m_pMainWnd->DestroyWindow();-------->錯誤的地方,於 0x00698bc9 的 OwnerDrawButton.exe 中發生未處理的例外狀況: 0xC0000005: 讀取位置 0xfefeff66 時發生存取違規
}
nReturnCode = pThread->ExitInstance();
goto InitFailure;
}
nReturnCode = pThread->Run();

InitFailure:
#ifdef _DEBUG
// Check for missing AfxLockTempMap calls
if (AfxGetModuleThreadState()->m_nTempMapLock != 0)
{
TRACE(traceAppMsg, 0, "Warning: Temp map lock count non-zero (%ld).\n",
AfxGetModuleThreadState()->m_nTempMapLock);
}
AfxLockTempMaps();
AfxUnlockTempMaps(-1);
#endif

AfxWinTerm();
return nReturnCode;
}
ziyue007 2011-11-26
  • 打赏
  • 举报
回复
这种问题一般都是内存溢出导致的,建议将你写的程序从头理一遍,在一些指针、数组之类的应用的地方着重看一下,设置断点跟踪程序走向,到报错的位置,一般都能再附近找到出错原因,耐心点就行了,这种错误别人只能告诉你怎么去纠错,但不能帮你找到错误位置们自己慢慢找就行了,记得解决问题给分啊
lvbu007 2011-11-25
  • 打赏
  • 举报
回复
我也遇到了 不好解决啊
dongfangbuba 2011-02-12
  • 打赏
  • 举报
回复
JF........
楼上把我知道的都说了!!
wuta2006 2011-02-06
  • 打赏
  • 举报
回复
....
sir_tian 2010-10-24
  • 打赏
  • 举报
回复
我是来刷分的
shiyunqiang 2010-10-23
  • 打赏
  • 举报
回复
楼主的问题我遇到过,而且已经解决了。

具体方法是:

遇到类似的问题一般都是释放了没有分配内存的指针所导致的(我遇到的是这样的,不代表全部);
关闭系统时才出现这种问题,那么这个问题一般出现在析构函数中。

所以建议楼主看一下自己程序类的析构函数中是否存在上述问题指针!
chenjiawei007 2010-10-20
  • 打赏
  • 举报
回复
这种问题很常见,在操作哪个函数时赋值不对就会出,内存访问冲突的问题太常见了,而原因也不一

没有代码 可以确定什么问题吗?

贴源码。
liyelun 2010-10-15
  • 打赏
  • 举报
回复
你点中断?点重试试下,看能不能定位倒某个地方
zhangdanshaniu 2010-10-14
  • 打赏
  • 举报
回复
我也遇到这种错误了,就是死活不知道哪里出错了
jingjingfan 2009-06-05
  • 打赏
  • 举报
回复
估计是指针或者数组没弄好
yqlhust 2009-06-05
  • 打赏
  • 举报
回复
设置断点调试
BlueAsuro 2009-02-15
  • 打赏
  • 举报
回复
LZ,
建议在可疑的类的析构 或者 Release之类的函数里卡断点
确定错误代码位置
再联系上下文
按上面你说那种内存错误 没人能帮你分析出来

chinacoding 2009-02-14
  • 打赏
  • 举报
回复
这个问题 我好像和别人解释过

这个是内存操作出界造成的

你用mfc就更有这个可能了

问题的原因类似于如下:
char text[7]; //注意 7个字节
int a; // 4个字节

a = 9;

// 注意下面这个操作不会出错,但是你改变了a的值, 修改了a的一个字节,一般像这种变量是不会出现很大的错误,
// 但是如果a定义是这样 CWnd a; 或者是 CWnd* a// 这样就麻烦了
memcpy(text, "12345678", 8);
至于你的程序错在什么地方 你就得自己去调试了
VC天下 2009-02-10
  • 打赏
  • 举报
回复
估计是指针或者数组惹得祸,把代码拿出来看看
Jeff20040819 2009-02-09
  • 打赏
  • 举报
回复
up

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧