c++ - 我得到的掩护问题为 "Wrapper object use after free (WRAPPER_ESCAPE)"

标签 c++ string coverity

您好,我遇到了 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/

相关文章:

c++ - 如何使用传递给当前子程序的参数调用不同的子程序(用于递归)?

windows - 将路径列表转换为文件名列表

c++ - 在 C++ 中比较 buffer 和 const char*

c++ - 对结构成员的临时绑定(bind)引用

c - 为什么 coverity 会为此发出警告?

c++ - 使用 boost 程序选项通过配置文件/命令行解析自定义对象

c++ - 如何使用 Clang 通过命令行编译 Xcode 项目?

c++ - C++ 中的内置类型 bool 或 C 中的 stdbool.h 类型将 TRUE 和 FALSE 定义为不是机器字的大小?

c# - ASCIIEncoding.GetString(byte[]) 之后表示空字节的字符是什么?

java - 如何处理以下覆盖率扫描问题参数 docId 接收受污染的数据 (taint_path_param)