我有密码,
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
的析构函数中被 delete
d。
您可能还想将 if
block 的内容更改为
foo& lcFoo = obj->Foo();
尽管您在这里获得双重释放这一事实表明存在比这更大的问题。
关于c++ - 在 C++ 代码中检测双重释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3655060/