Может ли произойти ошибка сегмента, если вы выполняете арифметические операции итератора за пределами ограничений?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли произойти ошибка сегмента, если вы выполняете арифметические операции итератора за пределами ограничений?

Сообщение Anonymous »

-> случайный допустимый векторный итератор

Код: Выделить всё

const int kLookAheadIndex
-> случайное число

Код: Выделить всё

auto it_ahead = std::max(it - kLookAheadIndex, path.cbegin());  // get a look-ahead point to look at
Я знаю, что это «неопределенное поведение», поскольку я не проверяю, приводит ли оно к тому, что kLookAheadIndex дает итератор, выходящий за пределы — вычитание может вернуть итератор слева от path.cbegin(). Но все же, вызовет ли эта строка кода когда-нибудь ошибку сегментирования, поскольку разыменование не выполняется?

Код: Выделить всё

2025-11-13T12:49:06,117355+00:00 [139806]: segfault at 7f779bffed10 ip 00007f7880937d9c sp 00007f77adff1ba0 error 4 in libbase_planning.so[7f78807e9000+372000] likely on CPU 15 (core 27, socket 0)
Минимальный пример, в котором нет сегментации: https://onlinegdb.com/LKYPy2wGFK


Подробнее здесь: https://stackoverflow.com/questions/798 ... ond-limits
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»