При выходе за пределы динамического массива программа впервые вместо вылета с ошибкой 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;
}
Выход за пределы массива (а тут еще и обращение к неинициализированному объекту) является неопределенным поведением. Неопределенное поведение означает, что результат компиляции и исполнения программы непредсказуем. Ожидание конкретного результата, в том числе аварийного завершения программы, при наличии в ней неопределенного поведения является неправильным.
Для исправления есть только один вариант - устранение неопределенного поведения в программе.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение
Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...
Я только недавно решил установить себе впервые линуксПроблема в следующем, при сборке выдает вот это :