0

私はオブジェクトを持っています

priority_queue<SState,vector<SState>,greater<SState> > m_queue;

これは、SState が定義された内部構造体であるクラスのメンバーです。

struct SState
{
    SState(int p, int b):priority(p),bbb(b){}
    ~SState(){}
    int priority;
    int bbb;
};

そしてコンパレーター

inline bool operator > (const MyClass::SState& left, const MyClass::SState& right)
{
   return left.priority > right.priority;
}

SState オブジェクトを作成するメソッドがあります。

m_queue.push(SState(p,b));

そして他の方法で

if (!m_queue.empty())
{

      const SState& state = m_queue.top();
      ...
      m_queue.pop();

}

ヒープが破損しました。それを正しく行う方法は?

4

2 に答える 2

0
const SState& state = m_queue.top();

そこで、スタック オブジェクトのヒープ コピーへの参照を取得しました。ただし、この参照はオブジェクトの有効期間を延長しません。

そこで

  m_queue.pop();

オブジェクトは破壊されており、それへの参照はもう使用できません。

于 2013-04-08T19:18:00.493 に答える
0

あなたの問題はおそらく、stateを呼び出した後に使用m_queue.pop();しているため、存在しないアイテムへの参照にアクセスすることです。後で呼び出しを関数に移動するかpop、スタックからアイテムへの参照を取得した後にアイテムのコピーを作成する必要があります。

于 2013-04-08T19:17:20.100 に答える