首页
社区
课程
招聘
[求助]HeapFree的异常用try catch捕捉不到
发表于: 2006-8-15 17:06 8998

[求助]HeapFree的异常用try catch捕捉不到

2006-8-15 17:06
8998
main()
{
    char* p1=(char*)HeapAlloc( GetProcessHeap(),HEAP_ZERO_MEMORY,7);
     strcpy(p1,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
   try{
        HeapFree(GetProcessHeap(),0,p1);
       }
   catch(...)
         {
           printf("error \n");
         }
    return 0;
}
显然strcpy以后p1会发生缓冲区溢出,try{}会发生异常,可是上述代码执行以后并没出打印出error字符串即catch{}没有执行,为什么会这样呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
最初由 lrh 发布
main()
{
char* p1=(char*)HeapAlloc( GetProcessHeap(),HEAP_ZERO_MEMORY,7);
strcpy(p1,"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
try{
........

把strcpy放到try{}中间.
2006-8-15 17:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lrh
3
引发异常的应该是HeapFree函数,strcpy函数运行不会引发异常。
可是用调试器调试上述代码时,用step over命令执行HeapFree()时会跳转到汇编状态,捕获到异常呀,那就是说HeapFree执行过程中有异常抛出,只不过用try catch捕获不到,这也是我的疑惑所在。
2006-8-15 18:01
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
根据我的试验,HeapFree函数根本没有产生异常
我试着把try-catch去掉,程序照样跑得好好的
Windows的API有些有防错机制,如果你传错误的参数它会把产生的异常自己处理掉,看上去它好像什么也没做
例如MessageBoxA函数,如果你传给它的字符串是NULL,它不会产生访问0地址异常的,估计HeapFree也类似

try-catch还是有用的,不信的话楼主可以故意在try中弄一个访问0地址异常,例如

p1 = 0;
*p1 = 0;

这样就可以看到“error”字样了
2006-8-15 23:32
0
游客
登录 | 注册 方可回帖
返回
//