c++ - 在 C++ 代码中检测双重释放

标签 c++

我有密码,

class foo
{
   public:
     foo(){};
     ~foo(){};
};

class bar
{
   public:
      bar(){};
     ~bar(){};

      foo& Foo()
      {
         return m_foo;
      }

  private:
      foo m_foo; 
};

int main()
{
   bar *obj = new bar;

   if( /* true condition here */ )
   {
      foo lcFoo;
      lcFoo = obj->Foo(); // forgot this
   }

   delete obj;
}

现在,当我调用“删除对象”部分时,我从 glibc 收到一条双重免费消息。

请指教。

谢谢。

编辑: 感谢您的评论,但这是我使用的确切代码。您是否认为问题出在 foo& Foo() 函数中,因为它返回 m_foo 对象的引用,然后当代码跳转到 if 条件大括号时,m_foo 将被删除?

最佳答案

您发布的代码中没有双重释放。我怀疑foo中有一些指针资源,在复制foo时将其作为指针复制; yet 在 foo 的析构函数中被 deleted。

您可能还想将 if block 的内容更改为

foo& lcFoo = obj->Foo();

尽管您在这里获得双重释放这一事实表明存在比这更大的问题。

关于c++ - 在 C++ 代码中检测双重释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655060/

相关文章:

c++ - 为什么在 std::cout 上显式调用 operator<< 会导致意外输出?

c++ - 重载 operator new - 误导性输出

c++ - 全局 - c 中数组初始化的局部差异

c++ - 如何在同一个项目中运行多个不同的项目?

c++ - 为什么我不能将 <experimental/filesystem> 与 g++ 4.9.2 一起使用?

c++ - CArray 和 const 模板参数

c++ - MacOSX : How to collect dependencies into a local bundle?

c++ - 你可以在 QDialog 中添加一个工具栏吗?

c++ - 在 Linux 中使用 gcc 4.1 编译的 C++03 应用程序中使用 C++11 共享库?

c++ - cv::line 函数是倒转绘制线条