c ++ boost, итератор, выбрасывающий assert и программа завершается - PullRequest
0 голосов
/ 20 февраля 2012

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

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 - это итератор для циклического буфера.

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

Я даже отслеживал это в файле boost / циркулярный_буффер / detail.hpp

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

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

1 Ответ

1 голос
/ 20 февраля 2012

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

...