1

私のアプリケーションの 1 つで、boost shared_ptr 逆参照演算子内のアサートでアサート失敗例外が発生します。

T * operator-> () const // never throws
{
    BOOST_ASSERT(px != 0); <------ fails!
    return px;
}

問題は、デバッガーを使用すると、px の値が 0 とは異なり、0x7ff のように表示されることです.... ! そのような状況は可能ですか?アサートはどのように失敗する可能性がありますか?

ありがとう

4

1 に答える 1

1

あなたが自分で言うように、アサートは失敗していません。代わりに、内部で例外が発生しています。これは同じではありません。

私の推測では、オブジェクト自体が無効boost::shared_ptr::pxであるため、メンバーが間違ったメモリ位置を指していると思われます。boost::shared_ptr

たとえば、boost::shared_ptrあるクラスのメンバーとして使用されていますか? その場合、オブジェクトが有効かどうか (有効かどうか、thisメモリが破損していないかどうか)を確認してください。

アップデート:

わかりました-アサートが実際に失敗していることを明確にした後: に割り当てmysocketたり、呼び出したりしていmysocket.reset()ますか?

于 2012-11-12T09:25:32.063 に答える