Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Arrays [D7, WinXP]


Nobody_1988 ©   (2006-07-16 00:01:00) 

...
Map : array of array of integer;
...

procedure ...

SetLength(Map, 100, 100);

end.

Почему можно обратиться к элементам которых по идее нет
например - Map[99, -???] и к Map[99, ???]... глюк? или я что-то не понял...

Delphi 7.


Amoeba   (2006-07-17 12:03:00) [1]


> Ketmar ©   (16.07.06 13:10) [7]
> что обидно -- Range Checking влияет ещё и на арифметику.
>  с ходу не вспомню, но натыкался на это: при переполнении
> целых (Integer) вылазило исключение. я громко ругался матом.
>  %-)

Надо не обижаться, а благодарить за помощь.


Ketmar   (2006-07-16 13:10:00) [2]

что обидно -- Range Checking влияет ещё и на арифметику. с ходу не вспомню, но натыкался на это: при переполнении целых (Integer) вылазило исключение. я громко ругался матом. %-)


DrPass   (2006-07-16 02:08:00) [3]

Впрочем, "можно обратиться" - это громко сказано :) Просто в первом случае вероятность Access Violation не 100% - а как повезет в зависимости от состояния того блока памяти, куда ты залез, а во втором - 100%.
А с опцией Range Checking тебе не дадут обратиться к несуществующему элементу. Т.е. ты получишь всегда возникающую в таких непотребных случаях Range Check Error.


DrPass   (2006-07-16 02:03:00) [4]


> Тоесть контроль за элементом i включен, а за элементом j
> нет?

Map - это массив массивов. В первом случае ты обращаешься к несуществующему элементу существующего массива, а во втором случае - к элементу несуществующего массива.


Nobody_1988   (2006-07-16 01:22:00) [5]

Пока отключен Range cheсking, Delphi контроль за границами массивов оставляет целиком на твоей совести. Это не сложно, поверь :) А если сильно давит на сознание, включи Range Cheсking в настройках компилятора...

Map[i, j]

Тоесть контроль за элементом i включен, а за элементом j нет?


Nobody_1988   (2006-07-16 00:47:00) [6]

Разве SetLEngth (100) не деалет массив с индексами от 0 ... 99 ??

Можно обратиться например к Map[99, -400], но нельзя к Map[-400, 23]...


DrPass   (2006-07-16 00:38:00) [7]


> Почему можно обратиться к элементам которых по идее нет
>
> например - Map[99, -???] и к Map[99, ???]... глюк? или я
> что-то не понял...

Пока отключен Range cheсking, Delphi контроль за границами массивов оставляет целиком на твоей совести. Это не сложно, поверь :) А если сильно давит на сознание, включи Range Cheсking в настройках компилятора...


S@shka   (2006-07-16 00:07:00) [8]

Разве SetLEngth (100) не деалет массив с индексами от 0 ... 99 ??


Наверх

Титульная страница Поиск, карта сайта Написать письмо