1

在我的一个应用程序中,我在 boost shared_ptr 取消引用运算符中的断言中得到了一个断言失败异常:

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

问题是使用调试器我看到 px 的值与 0 不同,类似于 0x7ff ....!这种情况可能吗?断言怎么会失败?

谢谢

4

1 回答 1

1

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

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

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

更新:

好的-在您澄清断言确实失败之后:您是否曾经分配过mysocket或什至调用过mysocket.reset()

于 2012-11-12T09:25:32.063 回答