Показать сообщение отдельно
Старый 13.04.2012 в 19:28 Цитата выделенного #89
Catala
Ленивый webmaster
Аватар для Catala
 
Регистрация: 28.04.2006
Сообщения: 10,312
Сказал(а) спасибо: 317
Поблагодарили: 15,021 раз(а) в 5,206 сообщениях
Деньги: 878076$
 
По умолчанию

Цитата:
Сообщение от К@t@LoNeЦ
Необязательно.Я ввожу, начиная с mass[1].Ведь в for сначала идет присвоение элемента ,а потом увеличение номера элемента
Интересно вас учат. Объясняю. Допустим массив начинается в адресе 1000. Когда ты делаешь new int[5] операционная система выделяет тебе сплошной блок памяти размеров в 20 байт(int 4 байта). mass[i] это то же самое, что *(mass + (4 * i)). Поэтому обращение к mass[5] это обращение к адресу 1020, которое тебе не принадлежит. И не имеет никакого значения как ты вводишь элементы. Ввод элементов это не выделение памяти, а запись данных в уже выделенную. В C всегда массив начинается с нуля. Если ты хочешь использовать n элементов начиная с 1, то в new нужно давать n+1. Ты же вообще делаешь в начале delete, что освобождает память и для тебя она не существует, а потом обращаешься к памяти которая не была твоей даже до этого освобождения.

Переменная k тебе не нужна. В условии второго пробега достаточно mass[i] < max. Ну и у тебя слева в условии цикла 1 вместо i. 32000 очень надеюсь нужно только для проверки.
__________________
Не ошибается тот - кто не думает.(C)RIVALDO
Offline   Ответить с цитированием