我有一个代码,
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将被删除吗?
您发布的代码中没有双重免费.我怀疑有一些指针资源foo,当复制foo时,它被复制为指针; 但是delete在foo析构函数中.
您可能还想将if块的内容更改为
foo& lcFoo = obj->Foo();
Run Code Online (Sandbox Code Playgroud)
虽然你在这里获得双重自由的事实表明比这更大的问题.
| 归档时间: |
|
| 查看次数: |
2756 次 |
| 最近记录: |