Ошибка при работе с массивами.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Приветствую всех! У меня вот какая проблема. Начал учится языку С++ относительно недавно. Пока все было хорошо. Но столкнулся с проблемой с массивами. Программа работает нормально, но после завершения работы вылазит окно с таким описание ошибки : «Run-Time Check Failure #2 — Stack around the variable 'arr' was corrupted.»
Вот внизу вроде бы нормальный код по генерации массива и его сортировке. Уже два дня ищу, где ошибка. Помогите найти, что не так.
Я особо не вникал, но во фрагменте
ты вылетаешь за границу массива. Причём при присваивании, что вдвойне плохо.
От 0 до 10 включительно — 11 итераций цикла, а размер массива у тебя 10 элементов. На этом ты и получаешь «stack corrupted». (Это у тебя во всех циклах.)
Надо запомнить сишную идиому для прохода по массиву:
А вообще лучше размер массива задавать не литералом (т.е. просто числом), а через символическую константу. Тогда при необходимости изменения размера массива надо будет внести изменение только в константе, а не просматривать весь код и поправлять числа:
Привет, Денис, здесь на форуме, в одной из заметок, я читал о том, что нужно к коду прилагать комментарии.
Объясни в кратце, что делает твоя программа, кроме нахождения остатка от случайных чисел, конечно:)
Обрати внимание на объявление
int arr[10];
. Ты объявляешь размер массива 10 элементов типаint
, а в управляющем разделе операторовfor
, переменнуюi
сравниваешь с 11.Ты наверное, забыл, что нумерация массивов начинается с нуля, значит, переменная
i
должна быть < 10 . Поэтому, если переписать код вот так:то, я думаю, все заработает:)
Спасибо вам! Вы были правы насчет выхода за границы в циклах. Но и в строчке
for (k=10; k>(i-1); k--)
должно быть не k=10, а k=9. Я просто раньше воспринимал arr[10] как массив из 11 элементов от 0 до 10 включительно.Еще раз спасибо!!!