0

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

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

根据文档

tpreturn() 的作用类似于 C 语言中的 return 语句(即,当调用 tpreturn() 时,服务例程返回到 BEA Tuxedo 系统调度程序)。

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

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

4

1 回答 1

0

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);

不会调用 getting_str 的析构函数,您将有内存泄漏。

于 2018-05-08T10:58:33.947 回答