Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2010, 22:09   #1
Noktikus
Новичок
Джуниор
 
Регистрация: 17.04.2010
Сообщений: 2
По умолчанию Консольное приложение и динамические массивы

Код:
var
  Mas: array of integer;
begin
  SetLength(Mas, 10);
  Writeln(Mas[20]);
  Readln;
end.
Не могу понять, почему Writeln выводит 0, а не вызывает исключение EAccessViolation?
Noktikus вне форума Ответить с цитированием
Старый 09.09.2010, 22:56   #2
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

А в чем, собственно, проблема?
Установить для компилятора директиву "Range cheсking" и получим долгожданную ошибку. Пусть не access violation, но тоже ничего.
Скандербег вне форума Ответить с цитированием
Старый 10.09.2010, 08:48   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
а не вызывает исключение EAccessViolation?
Потому что память по адресу Mas + 19*sizeof(Integer) вашей проге еще доступна.
p51x вне форума Ответить с цитированием
Старый 10.09.2010, 09:06   #4
Gambler
Игрок
Форумчанин
 
Аватар для Gambler
 
Регистрация: 29.10.2006
Сообщений: 367
По умолчанию

Более того, там можно наткнуться на другую переменную. Я так в универе над преподами стебался. Описываешь массив на 10 элементов. Потом счетчик цикла (желательно одного типа данных) и меняешь 11 элемент массива. Это и есть счетчик. (ну если повезет). Преподы в шоке. Долго думали почему программа работает.
Жизнь всегда игра. Но смерть - не всегда поражение.

#define true (Math.random()>0.5) //Удачной отладки
Gambler вне форума Ответить с цитированием
Старый 10.09.2010, 15:28   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Потому что память выделяется "кластерами". Ровно как и под файлы на диске.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение Lag Общие вопросы C/C++ 3 05.05.2010 08:02
консольное приложение user_jasser Общие вопросы Delphi 3 17.10.2008 12:17
Консольное приложение a_priori Общие вопросы Delphi 6 12.03.2008 08:33
Консольное приложение eks-s Общие вопросы Delphi 17 25.01.2008 03:12