作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在当前工作的代码库中经常看到这种方式:
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/
我在当前工作的代码库中经常看到这种方式: int obtained_number = 5; char *answer = tpalloc(15); sprintf(answer, "num:%d",
我是一名优秀的程序员,十分优秀!