游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2265|回复: 3

基础问题:How To catch 0xC0000005 exception?

[复制链接]

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-5-7 13:05:00 | 显示全部楼层 |阅读模式
一个基础问题:

try {
} catch(...) //这里面怎么写才能捕获0xC0000005 这样编号的异常?
{

}

我写了个GC的程序,有线程自动管理对象的释放,但被管理的对象可能已经被释放而出现野指针
我又不想去使用智能指针去破还程序的结构性,所以想到异常处理应该是个比较好的方案,
只是我不知道怎么捕获0xC0000005 ?

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-8 13:26:00 | 显示全部楼层

Re: 基础问题:How To catch 0xC0000005 exception?

自问自答吧:
//SEH的错误代码查看过滤方法
int filter(unsigned int code, struct _EXCEPTION_POINTERS *ep) {
        if (code == EXCEPTION_ACCESS_VIOLATION) {
                //puts("caught AV as expected.");
                return EXCEPTION_EXECUTE_HANDLER;
        }
        else {
                //puts("didn't catch AV, unexpected.");
                return EXCEPTION_CONTINUE_SEARCH;
        };

}

void mydel(Dem *p) {
        __try {
          delete(p); //野指针重复释放原本会出错,但错误能被处理掉而继续运行
        } __except(filter(GetExceptionCode(), GetExceptionInformation()))
        {
          MessageBox(NULL, "访问野指针,出错!!", NULL, NULL);
        }   
}

int main()
{

    int *p = new int;
    int *p1 = p;

    delete(p);
    p = NULL;
    mydel(p1);     
...
}

0

主题

45

帖子

51

积分

注册会员

Rank: 2

积分
51
发表于 2007-5-9 12:34:00 | 显示全部楼层

Re: 基础问题:How To catch 0xC0000005 exception?

代码本身不能运行啊,还要#define... 或#include...什么东东吗?
我的程序exception code: 0x00000005
怎么才能找到出错的代码行呢

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
 楼主| 发表于 2007-5-9 13:29:00 | 显示全部楼层

Re:基础问题:How To catch 0xC0000005 exception?

#include <excpt.h>

需要这个,差点忘了。上面的有些代码部分出自MSDN查 __try 的用法就知道了,有例子的。

这种用法,似乎很少有人用到,我也是网上goo了好一把才找到方法,不敢独享。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 13:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表