shared_ptr断言px!= 0失败

Hor*_*cio 30 boost-thread shared-ptr

我有一个相当复杂的多线程应用程序(服务器),由于断言,有时会崩溃:

/usr/include/boost/smart_ptr/shared_ptr.hpp:418: T* boost::shared_ptr< <template-parameter-1-1> >::operator->() const [with T = msg::Player]: Assertion `px != 0' failed.
Run Code Online (Sandbox Code Playgroud)

我一直无法确定原因,并想知道这是一个问题与boost :: shared_ptr或它是我吗?

我尝试了g ++ 4.4.3-4ubuntu5和llvm-g ++(GCC)4.2.1优化而没有优化和libboost1.40-dev(= 1.40.0-4ubuntu4).

jde*_*aan 36

boost::shared_ptr只要正确初始化共享指针并对所有共享对象库使用相同的内存管理上下文,使用应该没有问题.

在您的情况下,您尝试使用未初始化的共享指针.

boost::shared_ptr<Obj> obj;
obj->Something(); // assertion failed

boost::shared_ptr<Obj> obj(new Obj);
obj->Something(); // ok
Run Code Online (Sandbox Code Playgroud)

我建议尽可能在声明时初始化它们.异常处理可以为代码运行创建许多"隐形"路径,并且识别非初始化的共享指针可能非常困难.

PS:如果您加载/卸载shared_ptr正在使用的模块导致混乱,还有其他问题.这很难解决,但在这种情况下你会有一个非零指针.这不是你现在发生的事情.