Выход за пределы массива C++

206
05 августа 2018, 07:50

При выходе за пределы динамического массива программа впервые вместо вылета с ошибкой 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;
}

Answer 1

Выход за пределы массива (а тут еще и обращение к неинициализированному объекту) является неопределенным поведением. Неопределенное поведение означает, что результат компиляции и исполнения программы непредсказуем. Ожидание конкретного результата, в том числе аварийного завершения программы, при наличии в ней неопределенного поведения является неправильным.

Для исправления есть только один вариант - устранение неопределенного поведения в программе.

READ ALSO
Скрыть метод в наследуемом классе

Скрыть метод в наследуемом классе

Есть необходимость переопределить видимость метода наследуемого от базового, или запретить его переопределение

173
Как получить число идущее после запятой введённой переменной типа double в C++? (например, ввели 14.25 - вывело 25)

Как получить число идущее после запятой введённой переменной типа double в C++? (например, ввели 14.25 - вывело 25)

Примерно продумал синтаксис, но выводит число неправильноАлгоритм такой: число оставить без его целой части, далее умножать на 10 до тех пор,...

166
Не работает codeblocks на linux ubuntu

Не работает codeblocks на linux ubuntu

Я только недавно решил установить себе впервые линуксПроблема в следующем, при сборке выдает вот это :

183