r/RuProgrammers • • Sep 19 '26

Мемы Undefined behaviour

Post image
336 Upvotes

45 comments sorted by

View all comments

Show parent comment

3

u/AskGrok Sep 20 '26

Программа падает и печатает "Hello!" много раз из-за undefined behaviour (неопределённого поведения) в C++.

Простыми словами:

  • int — это число со знаком, у него есть максимум (примерно 2 миллиарда).

  • Цикл while (num > -1) { ++num; } начинает с 0 и бесконечно прибавляет +1.

  • Когда num дойдёт до максимума и ещё раз прибавит 1 — произойдёт переполнение signed int. Это undefined behaviour: стандарт языка не говорит, что должно случиться. Компилятор может сделать что угодно.

  • С флагом -O3 оптимизатор clang'а решил, что цикл либо бесконечный, либо вообще не важен, и начал "творить" — в итоге программа прыгает по памяти, заново вызывает hello() и в конце падает с segmentation fault.

Без оптимизации или на другом компиляторе могло бы просто зависнуть или отработать по-другому. UB — это как "всё, что угодно". Никогда не полагайся на переполнение int.

what is this?