您好,我遇到了 Coverity 问题,因为 “包装对象在释放后使用 (WRAPPER_ESCAPE)1.escape:本地 hello 的内部表示逃逸,但在退出范围时被销毁”请帮助我修复它
extern const char * Helloworld()
{
std::string hello = obj->myfunction();
return hello.c_str(); // this is return to a c function
}
最佳答案
std::string hello = obj->myfunction();
将创建一个带有自动存储的字符串。然后使用 return hello.c_str();
返回指向底层 char*
的指针。问题是在函数结束时 (}
) 所有自动对象都被销毁了。这将删除您刚刚传递指针的字符串的内容。在另一个函数中使用指针是未定义的行为,因为内存已被释放。
如果你想返回一个持久化的 char*
,那么你需要为 char*
分配内存并将字符串复制到其中。你可以这样做
与:
extern char * Helloworld()
{
std::string hello = obj->myfunction();
char * returner = new char[hello.size() + 1];
strcpy(returner, hello.c_str());
return returner;
}
有了这个,调用者必须在完成时删除指针,否则会发生内存泄漏。
关于c++ - 我得到的掩护问题为 "Wrapper object use after free (WRAPPER_ESCAPE)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950843/