C++ Boost shared_ptr断言失败,但该值不为NULL

C++ Boost shared_ptr断言失败,但该值不为NULL,c++,boost,shared-ptr,C++,Boost,Shared Ptr,在我的一个应用程序中,我在boost shared_ptr dereference操作符内的assert中得到一个assert fail异常: T * operator-> () const // never throws { BOOST_ASSERT(px != 0); <------ fails! return px; } T*运算符->()常量//从不抛出 { BOOST_ASSERT(px!=0);正如您自己所说,ASSERT没有失败。相反,它内部引发了一个

在我的一个应用程序中,我在boost shared_ptr dereference操作符内的assert中得到一个assert fail异常:

T * operator-> () const // never throws
{
    BOOST_ASSERT(px != 0); <------ fails!
    return px;
}
T*运算符->()常量//从不抛出
{

BOOST_ASSERT(px!=0);正如您自己所说,ASSERT没有失败。相反,它内部引发了一个异常。这是不同的

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

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

更新:


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

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

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

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

更新:


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

调试器可能会对您撒谎-尤其是在发布模式下构建时。您会遇到什么样的异常?如果是内存访问异常,那么这不是由于断言失败造成的(顺便说一句,它不是在发布模式下编译的)Visual Studio通常会将0xCDCD表示为错误指针。如果断言命中,则指针为0。问题是:为什么?您应该发布如何构造共享\u ptr…一定是出了问题there@Chris:他不是说断言失败。他是说在断言中抛出了一个异常…调试器可能会对你撒谎-espe特别是在发布模式下构建时。您会遇到什么样的异常?如果是内存访问异常,则不是由于断言失败(顺便说一句,它不是在发布模式下编译的)Visual Studio通常会将0xCDCD表示为错误指针。如果断言命中,则指针为0。问题是:为什么?您应该发布如何构造共享\u ptr…一定是出了问题there@Chris:他不是说断言失败。他是说断言中抛出了异常…对不起,将问题编辑为b更清楚地说,但是断言实际上失败了,我在控制台中得到了它:/usr/include/boost/smart_ptr/shared_ptr.hpp:414:T*boost::shared_ptr::operator->()const[with T=boost::asio::basic_stream\u socket]:Assertion`px!=0'失败。很抱歉,为了更清楚地说明问题,对问题进行了编辑,但是assert实际上失败了,我在控制台中得到了:/usr/include/boost/smart_ptr/shared_ptr.hpp:414:T*boost::shared_ptr::operator->()const[带T=boost::asio::basic_stream__socket]:Assertion`px!=0'失败。