2014-09-16 3 views
0

следующего фрагмента коды вызывает Assert„Deque итератора не разыменовываемый“с последующим исключением:«Deque итератора не dereferencable` при этом зОм :: deque-> фронт()

if (data[n].stateFlagQueue->empty()) cstate=0; 
else 
{ 
    cstate=data[n].stateFlagQueue->front(); 
    if (data[n].stateFlagQueue->size()>1) data[n].stateFlagQueue->pop(); 
} 

утверждает, происходит с данными [n] .stateFlagQueue-> front(), а stateflagQueue имеет размер 3, поэтому имеется достаточно данных. Весь код, приведенный выше, обеспечивается взаимной блокировкой, то же самое верно и для кода, который выполняется в отдельном потоке и заполняет stateFlagQueue с данными:

if ((data->stateFlagQueue->empty()) || 
    (data->stateFlagQueue->back()!=data->m_response.cstate)) 
data->stateFlagQueue->push(data->m_response.cstate); 

Итак ... как это может произойти, это исключение по-прежнему происходит?

Спасибо!

+3

Опубликовать [MCVE] (http://stackoverflow.com/help/mcve). – juanchopanza

+2

Его * тот же мьютекс * для обоих блоков, верно? Вы знаете, одно достаточно важное, чтобы упомянуть, но, по-видимому, не показывать нам. – WhozCraig

+0

WhozCraig: да, это тот же мьютекс. Функция блокировки/разблокировки размещается точно вокруг фрагментов кода, которые я разместил здесь. – Elmi

ответ

0

OK, решена, произошла неправильная разблокировка мьютекса, между которой возникла эта проблема.

Смежные вопросы