Boost shared_ptr断言失败但值不为NULL

时间:2012-11-12 09:07:28

标签: c++ boost shared-ptr

在我的一个应用程序中,我在boost shared_ptr dereference运算符内的assert中得到一个断言失败异常:

T * operator-> () const // never throws
{
    BOOST_ASSERT(px != 0); <------ fails!
    return px;
}

问题是使用调试器我看到px的值与0不同,类似0x7ff ....!这样的情况是否可能?断言如何失败?

由于

1 个答案:

答案 0 :(得分:1)

正如你自己所说,断言并没有失败。相反,它内部正在引发异常。这不一样。

我的猜测是boost::shared_ptr::px成员指向不正确的内存位置,并且这样做,因为boost::shared_ptr对象本身无效。

例如,您的boost::shared_ptr是否被用作某个班级的成员?如果是,请检查对象是否有效(this有效,内存是否已损坏)?

<强>更新

好的 - 在您澄清断言确实失败之后:您是否曾分配给mysocket或甚至致电mysocket.reset()