怎样捕捉OxC0000005类型的内存访问冲突引起的异常

laoluo9932 2013-02-20 05:22:26
我的一个程序调用了一个第三方的库,该库我是无法修改和调试的。在debug下运行,在调用该库的某个API时偶尔会抛异常,导致程序崩溃。提示框显示:OxC0000005访问0x********地址错误,大致就是这样的信息。
我想捕捉到这个异常,这样进程在运行时就不会崩溃了。可是我用C++的try catch(...)捕获不到,用__try __except也捕捉不到。
请各位大侠给指点一下,有什么办法能捕捉到这种内存访问错误引起的异常。
...全文
993 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stjay 2013-02-20
  • 打赏
  • 举报
回复
这个能够捕捉0xC0000005异常
int SehFilter(DWORD dwExceptionCode)
{
	switch (dwExceptionCode)
	{
	case EXCEPTION_ACCESS_VIOLATION:
		return EXCEPTION_EXECUTE_HANDLER;
	}
	return EXCEPTION_CONTINUE_SEARCH;
}

int test()
{
	*(int*)0 = 0;
	return 0;
}

int main(int argc, char* argv[])
{
	__try
	{
		test();
		printf("test()");
	}
	__except (SehFilter(GetExceptionCode()))
	{
		printf("EXCEPTION_ACCESS_VIOLATION");
	}

	getch();
}
okgogo2000 2013-02-20
  • 打赏
  • 举报
回复
启动时 if (!ProcessShellCommand(cmdInfo)) 有时会crash报以上错误。 关注中。。。
一个傻冒 2013-02-20
  • 打赏
  • 举报
回复
是不是栈溢出,覆盖了异常处理在栈中的记录,所以捕捉不到了?
漫步者、 2013-02-20
  • 打赏
  • 举报
回复
用assert试一试,或者debug-》 call back
zcchm 2013-02-20
  • 打赏
  • 举报
回复
http://stackoverflow.com/questions/993551/seh-access-violation-and-stack-guard-page To catch access violation exceptions, you need to enable SEH exception handling (C/C++ -> Code Generation -> Enable C++ Exceptions -> Yes, with SEH Exceptions). Be warned though, this will more likely than not make your software less reliable. You won't always get an access violation on every bad memory access -- it is very possible that your bad pointer points to valid virtual memory. In that case could overwrite any valid data in your program, but not see the consequences for a long time. You are much better off to ensure that you would never write to bad memory in the first place.
jimette 2013-02-20
  • 打赏
  • 举报
回复
刚刚调用CoInitialize 引起了上述错误 更改了一下位置 错误没有 关注!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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