gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:49 24 4
gpt4 key购买 nike

我有密码,

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com