| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 836 人关注过本帖
标题:咨询__finally的使用方法?
只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:10 回复次数:3 
咨询__finally的使用方法?
程序代码:
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>



char* MyHookFn2(char* szTxt)
{
    char* pBuf = (char*)malloc(strlen(szTxt) + sizeof(char*) * 32);
    return pBuf;
   

    __try
    {
        sprintf(pBuf,"%s\n",szTxt);
        printf("%s\n",pBuf);
    }
    __finally
    {
        free(pBuf);
        pBuf = NULL;
    }
}

int main(int argc,char** argv)
{
   

    printf("%s\n", MyHookFn2("test"));
   

    return 0;
}
网上看到 __finally后面的复合语句是终止处理语句。无论受保护区域是正常终止还是异常终止(比如 goto,return,leave等),当它退出的时候,终止处理语句都要执行。但是为什么上述函数char* MyHookFn2(char* szTxt)中的__finally没有被执行呢?
搜索更多相关主题的帖子: finally 咨询 
2010-08-05 00:58
烟雨袅袅
Rank: 6Rank: 6
来 自:星空雨际
等 级:侠之大者
威 望:1
帖 子:430
专家分:494
注 册:2007-11-26
收藏
得分:5 
没试过,猜测
一旦执行了try,finally一定执行
但在char* MyHookFn2(char* szTxt)
{
    char* pBuf = (char*)malloc(strlen(szTxt) + sizeof(char*) * 32);
    return pBuf;//这句没执行到try,函数就返回了,所以finlly没执行

 
2010-08-05 06:58
东海一鱼
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:48
帖 子:757
专家分:4760
注 册:2009-8-10
收藏
得分:5 
楼主看看SEH结构化异常在VC上的实现,就明白了。

举世而誉之而不加劝,举世而非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。彼其于世未数数然也。
2010-08-05 12:19
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
回复 2楼 烟雨袅袅
程序代码:
#include <malloc.h>
#include <stdio.h>
#include <string.h>
char* MyHookFn2(char* szTxt)
{
    char* pBuf = (char*)malloc(strlen(szTxt) + sizeof(char*) * 32);

    __try
    {
        sprintf(pBuf,"%s\n",szTxt);
        printf("%s\n",pBuf);
    }

     return pBuf;

    __finally
    {
        free(pBuf);
        pBuf = NULL;
    }
}

int main(int argc,char** argv)
{
    printf("%s\n", MyHookFn2("test"));
    return 0;
}
您说的可能对,因为我上述代码在编译时没有通过,说明这个 __try和__finally确实要配对!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-06 00:38
快速回复:咨询__finally的使用方法?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012191 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved