Попробуй запусти ее в отладчике и введи 5000000000000.
Ты увидишь, что записывается в переменную верхний предел для значений типа int: 2147483647. Переполнения не происходит по простой причине: оператор cin>>int_var "знает" размер переменной и не запишет в нее больше, чем она вмещает.
Переполнение возникает тогда, когда функция "не знает" размера буфера и случайно записывает больше, чем он вмещает.
Пример:
Код:
void main()
{
char local_buffer[10];
gets(local_buffer);
return 0;
}
gets() не знает размер буфера (он просто-напросто ей не передается), поэтому она записывает туда вслепую - авось, да поместится. А попробуй введи строчку длиннее 10 символов, например, ййййййййййййййййййййййййй . Буфер переполнится и инструкция return 0 вылетит с Access Violation.
Совет - читай мою статью про переполнение буфера:
https://forum.antichat.ru/thread26791.html
|