在我的一个应用程序中,我在boost shared_ptr dereference运算符内的assert中得到一个断言失败异常:
T * operator-> () const // never throws
{
BOOST_ASSERT(px != 0); <------ fails!
return px;
}
问题是使用调试器我看到px的值与0不同,类似0x7ff ....!这样的情况是否可能?断言如何失败?
由于
答案 0 :(得分:1)
正如你自己所说,断言并没有失败。相反,它内部正在引发异常。这不一样。
我的猜测是boost::shared_ptr::px
成员指向不正确的内存位置,并且这样做,因为boost::shared_ptr
对象本身无效。
例如,您的boost::shared_ptr
是否被用作某个班级的成员?如果是,请检查对象是否有效(this
有效,内存是否已损坏)?
<强>更新强>
好的 - 在您澄清断言确实失败之后:您是否曾分配给mysocket
或甚至致电mysocket.reset()
?