gpt4 book ai didi

c - 在 BEA Tuxedo 中,在 tpreturn 之后调用 tpfree 有意义吗?

转载 作者:行者123 更新时间:2023-11-30 16:32:18 29 4
gpt4 key购买 nike

我在当前工作的代码库中经常看到这种方式:

int obtained_number = 5;
char *answer = tpalloc(15);
sprintf(answer, "num:%d", obtained_number);
tpreturn(TPSUCCESS, 0, answer, answerSize, 0);
tpfree(answer);//why?

根据documentation :

tpreturn() acts like a return statement in the C language (that is, when tpreturn() is called, the service routine returns to the BEA Tuxedo system dispatcher).

如果是这样,我想服务将在此时完成,并且永远不会调用 tpfree() 。当再次调用该服务时,它会再次在 main 方法中启动,而不是上次执行完毕的地方。

这是正确的吗?我应该报告这种不必要的 tpfree() 使用吗?

最佳答案

tpreturn()实际上执行的是longjmp(),并且执行tpreturn()之后没有任何代码。当再次调用服务时,会从服务函数的开头开始。

在您的情况下,这意味着 tpfree() 永远不会执行,也不应该执行 - tpreturn() 负责处理您传递给它的缓冲区(释放、为下一次调用缓存等)

对于 C++ 代码来说,什么更糟糕

std::string obtained_str = "5";
char *answer = tpalloc(15);
sprintf(answer, "str:%s", obtained_str.c_str());
tpreturn(TPSUCCESS, 0, answer, answerSize, 0);

obtained_str 的析构函数不会被调用,并且会出现内存泄漏。

关于c - 在 BEA Tuxedo 中,在 tpreturn 之后调用 tpfree 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50218048/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com