@TiPo

Почему работает выход за пределы границ массива?

Язык программирования: C++

Среда разработки и компилятор: Visual Studio 2013 Update 4

У меня успешно компилируется и выполняется следующий код:
#include <iostream>

using namespace std;

int main(void)
{
	int arr[3];

	arr[6] = 10;
	cout << arr[6] << endl;

	return 0;
}


Разве программа не должна аварийно завершаться на следующей строке?
arr[6] = 10;
  • Вопрос задан
  • 824 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Выход за границу аллоцированного блока памяти в C/C++ сопровождается неопределенным поведением. Неопределенное поведение, в редком частном случае может совпасть с ожидаемым поведением.

Допускать состояние неопределенного поведения в программах нельзя - это ошибка. Исправляйте.

Среда выполнения намеренно не выполняет проверку на выход за границу индексного оператора, дабы не тратить драгоценное время процессора.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Denormalization
@Denormalization
gcc 4.8.2:
Компилирует, но сама программа падает, как и ожидалось, с сегфолтом.

Програма точно не падает у тебя?
Ответ написан
@vilgeforce
Раздолбай и программист
Релизную сборку запускаете или отладочную?
Ответ написан
AxisPod
@AxisPod
Нет не должна. Права доступа даются на страницу памяти, которая обычно 4096 байт. И пока из страницы не выйдите, точно ошибок не будет. А если еще и дальше страницы будут идти с правами на запись, то опять же ничего не будет падать. Если хочется проверять такие ошибки, используйте статические анализаторы.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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