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

dom*_*lao 0 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;
}
Run Code Online (Sandbox Code Playgroud)

现在,当我调用"删除obj"部分时,我从glibc获得双重免费消息.

请指教.

谢谢.

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

Bil*_*eal 7

您发布的代码中没有双重免费.我怀疑有一些指针资源foo,当复制foo时,它被复制为指针; 但是deletefoo析构函数中.

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

foo& lcFoo = obj->Foo();
Run Code Online (Sandbox Code Playgroud)

虽然你在这里获得双重自由的事实表明比这更大的问题.