shared-ptr boost-thread

shared ptr - Shared_ptr Afirmación px!=0 falló



shared-ptr boost-thread (2)

No debería haber ningún problema con el uso de boost::shared_ptr siempre que inicialice correctamente los punteros compartidos y use el mismo contexto de administración de memoria para todas sus bibliotecas de objetos compartidos.

En su caso, está tratando de usar un puntero compartido sin inicializar.

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

Aconsejaría inicializarlos en la declaración siempre que sea posible. El manejo de excepciones puede crear muchas rutas "invisibles" para que se ejecute el código y puede ser bastante difícil identificar los punteros compartidos no inicializados.

PD: hay otros problemas si carga / descarga módulos en los que shared_ptr está en uso y conduce al caos. Esto es muy difícil de resolver, pero en este caso tendría un puntero distinto de cero. Esto no es lo que te está pasando ahora mismo.

Tengo una aplicación (servidor) de subprocesos múltiples bastante compleja que de vez en cuando se bloqueará debido a una afirmación:

/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.

No he podido identificar la causa y me preguntaba si este es un problema con boost :: shared_ptr o soy yo.

Probé g ++ 4.4.3-4ubuntu5 y llvm-g ++ (GCC) 4.2.1 con optimización y sin optimización y libboost1.40-dev (= 1.40.0-4ubuntu4).


es posible que desee asegurarse de que

Siempre use una variable de puntero inteligente con nombre para mantener el resultado de la nueva

como se recomienda aquí: boost :: shared_ptr - Mejores prácticas

Saludos, Jonny