标题:咨询__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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-314852-1-1.html




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

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