Задать вопрос
@Paantvel

Undefined behavior в C++?

Недавно узнал про undefined behavior в C++, прочитав вопрос на SO "Accessing an array out of bounds gives no error, why?"
Пришла в голову мысль:
int arr[2];
bool cycle = true;
int i = 2; //индекс массива который выходит за его пределы
while (cycle){
arr[i] = 1; //рандомное число
i++;
}

может неправильно написал, но суть думаю ясна, тип программа перезаписывает рандомные адресса за пределами массива (как я понял), тип у C/C++ нет ограничетеля на обращение к элементам массива.
Или если зациклить любое другое undefined behavior
Может какой конкретный компилятор не скомпилирует это, но g++ может быть.
Что будет когда этот код запустится? Произойдет run time ошибка или это сломает систему?
У ос есть защита от подобного?
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Скомпилирует любой компилятор с++. Может выдать ворнинги, если включена опция реагировать на предупреждения, как на ошибки, то тогда не скомпилирует, но только потому что его конкретно об этом попросили. Это не ошибка компиляции.

В этом главная проблема Undefined Behavior: компилятор его почти всегда не видит, и программа с ним может даже работать в каких-то случаях так, как программист задумывал. А в других совершенно необъяснимо падает или выдает бред.

У ОС защита от такой наглости с памятью, конечно, есть. Такая программа рано или поздно упадет с access violation, segmentation fault или еще чем-то подобным, когда цикл дойдет до не вашей памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы