в одном из моих приложений я получаю исключение assert fail в assert внутри оператора разыменования boost shared_ptr:
T * operator-> () const // never throws
{
BOOST_ASSERT(px != 0); <------ fails!
return px;
}
Проблема в том, что с помощью отладчика я вижу, что значение px отличается от 0, что-то вроде 0x7ff ….! Возможна ли такая ситуация? Как может провалиться утверждение?
Спасибо
Как вы сами говорите, утверждение не нарушается. Вместо этого внутри него возникает исключение. Это не то же самое.
Я думаю, что boost::shared_ptr::px
член указывает на неправильную ячейку памяти, и это так, потому что boost::shared_ptr
Сам объект недействителен.
Например, ваш boost::shared_ptr
используется в качестве члена какого-то класса? Если это так, проверьте, является ли объект действительным (является this
действителен, у него повреждена память)?
Обновить:
Хорошо — после вашего разъяснения, что утверждение действительно не удается: вы когда-либо назначаете mysocket
или даже звонит mysocket.reset()
?
Других решений пока нет …