@Arkadiysm

Массив. выделение памяти. ошибка сегментирования. но почему?

Вот так программа крашится с "Ошибка сегментирования (стек памяти сброшен на диск)", причем большую часть элементов цикл проходит успешно:
image.png
Вот так программа не крашится и успешно завершается:
image.png
А вот так она снова крашится:
image.png

Вопрос: что вообще происходит?
PS temp_arr_length = 2000
  • Вопрос задан
  • 30 просмотров
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Во-первых, код надо вставлять текстом, через кнопку </> в редакторе.
Во-вторых, пройдитесь вы дебаггером.

Проблема ошибок работы с памтью, что результат непредсказуем. Программа может упасть во время попытки что-то не то сделать с массивом, отработать неправильно, вывести неверный ответ в конце, упасть при завершении программы. Это зависит от тысячи факторов: что как компилятор расположил в машинном коде, как он решил использовать регистры... Поэтому даже перестановка слагаемых местами может влиять на результат в неправильной программе. Это и есть тот самый знаменитый Undefined Behavior.

В вашем случае arr[i] + abs(min), очевидно, может запрасто выйти за границы 0.. temp_arr_length-1.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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