c ++ boost итератор бросает assert и программа завершается

В этой строке появляется следующая ошибка:

const short pcmSample = *reinterpret_cast<const short*>(*(buffer->index));

buffer является объектом класса accumlator.

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

class accumlator : public boost::circular_buffer<char>
{
  public:
    boost::circular_buffer<char>::iterator index;
};

Я инициализировал итератор, чтобы он указывал на начало буфера

и index - итератор для кольцевого буфера.

boost :: cb_details :: iterator :: reference boost :: cb_details :: iterator :: operator * () const [with Buff = boost :: round_buffer, Traits = boost :: cb_details :: nonconst_traits>, boost :: cb_details :: iterator :: reference = char &]: утверждение `m_it! = 0 'не выполнено.

я даже отследил это в файле boost / round_buffer / detail.hpp

условие assert проверяет - указывает ли итератор на конец. если он указывает на конец, он выдает утверждение.

Заранее спасибо.


person ken    schedule 20.02.2012    source источник
comment
Я сделал отступ, заглавные буквы и исправил ваш вопрос. Помните, что чем больше усилий вы приложите к вопросу, тем больше вероятность, что вы получите ответ.   -  person ereOn    schedule 20.02.2012
comment
Большое спасибо, ereOn, я обязательно постараюсь улучшить представление своих вопросов.   -  person ken    schedule 20.02.2012


Ответы (1)


Похоже, вы не присвоили значению индекс. Оператор * выполняет проверку во время выполнения, чтобы убедиться, что он указывает на допустимое (не 0) значение.

person akhisp    schedule 20.02.2012
comment
Я инициализировал индекс, чтобы указать на начало кольцевого буфера, но выдается утверждение и ошибка, потому что индекс указывает на конец, - person ken; 20.02.2012
comment
Это означало бы begin () == end (). Что содержит round_buffer? Можете ли вы перебрать его и распечатать содержимое с помощью begin () и end ()? - person akhisp; 20.02.2012
comment
круговой буфер содержит данные типа char. да, конечно, данные присутствуют в буфере, я также передал их в файл. - person ken; 20.02.2012
comment
Это означает, что вам нужно опубликовать больше кода или привести простейший пример сбоя. Проверка кода round_buffer показывает, что метод begin () может вернуть итератор 0 только тогда, когда вызов empty () возвращает true. Итак, когда вы устанавливаете index в begin (), можете ли вы протестировать empty ()? - person akhisp; 20.02.2012
comment
Большое спасибо akhisp, исключение было выброшено, потому что мы инициализировали индекс в конструкторе в то время, когда буфер был пуст, поэтому он возвращал 0. поэтому, когда я использовал его в функции, он выдавал ошибку, большое спасибо за помощь. - person ken; 20.02.2012