У меня есть объектмагазин объект стека в приоритетной очереди
priority_queue<SState,vector<SState>,greater<SState> > m_queue;
, который является членом класса, в котором SState является внутренним strtuct, который определен
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();
}
Я получил повреждение кучи. Как это сделать правильно?
Вы делаете что-либо с помощью справки 'state' после вызова' pop'? Если это так, вы используете свисающую ссылку, которая, безусловно, может привести к повреждению кучи. Если нет, то проблема не в том коде, который вы опубликовали. –
использовать bbb как индекс для массива – iliam14