У очереди появилась вставка по диапазону — и по дороге исправлена ошибка с неинициализированной памятью

30.12.2025

У очереди на обоих концах появился метод замены диапазона элементов последовательностью — такой же, как у вектора и строки.

Почему очередь была особенной

Очередь хранится в кольцевом буфере, и её начало физически лежит в конце массива. Обычная замена диапазона с последующим сдвигом остальных элементов здесь требует учитывать, где обёрнут буфер, — и это источник ошибок.

Ошибка была в первом же появлении метода

В первой версии метода при переносе хвоста очереди реализация обращалась к памяти, которая не была инициализирована. Это неопределённое поведение: программа работает с тем, чего там нет.

Ошибку нашли и исправили ещё до того, как метод попал в стабильную поставку, но у пользователей ночных сборок код с этим поведением был. Исправление пришло через месяц, второе — через два с половиной.

Что это значит для пользователей

Если метод использовался из ночных сборок в период до исправления, стоит пересобрать: поведение могло быть произвольным там, где ожидалась обычная замена.

Оригинал

add VecDeque::splice

Упоминаний: 1 · Просмотров: 3