При выходе за пределы динамического массива программа впервые вместо вылета с ошибкой 0xC0000005 выводит "once (адрес) is (значение)". Из-за чего это возникает и как фиксить?
P.S. Code::Blocks 17.12 C++11
#include <iostream>
#include <cstdlib>
int main()
{
int *arr = 0;
arr = new int [3];
for (int i = 0; i < 13; i++) std::cout << arr + i << std::endl;
for (int i = 0; i < 13; i++) arr[i] = i;
for (int i = 0; i < 13; i++) std::cout << arr[i] << std::endl;
return 0;
}
Выход за пределы массива (а тут еще и обращение к неинициализированному объекту) является неопределенным поведением. Неопределенное поведение означает, что результат компиляции и исполнения программы непредсказуем. Ожидание конкретного результата, в том числе аварийного завершения программы, при наличии в ней неопределенного поведения является неправильным.
Для исправления есть только один вариант - устранение неопределенного поведения в программе.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости