我有一個對象存儲在一個優先級隊列
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;
};
和比較器的內strtuct堆疊對象
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();
}
我得到了一個堆損壞。 如何做到這一點?
在調用'pop'之後,你是否在做'state'引用?如果是這樣,你正在使用一個懸而未決的參考,這肯定會導致堆損壞。如果沒有,那麼問題不在您發佈的代碼中。 – 2013-04-08 19:14:55
使用bbb作爲數組的索引 – iliam14 2013-04-08 19:17:22