четверг, 11 апреля 2019 г.

Как обрушить программу на C++

Пытаемся выйти за пределы массива и получить segfault:
int *p = new int[3];
p[100] = 100;

Компилируем g++. Ничего не происходит. А все потому, что тут undefined behaviour, компилятор имеет право разбираться с проблемой как хочет. Вот тут об этом подробно (Accessing an array out of bounds gives no error, why?).

Делим на 0:
int x = 1/0;
Опять ничего! Программа компилируется, запускается.

Попробуем создать массив из минус одного элемента:
int *p = new int[-1];

Компилятор проглатывает без проблем. Но при запуске получаем исключение bad_alloc. Ура! Программа грохнулась!

Комментариев нет: