![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
А почему собственно ???
Skier © (2002-06-25 14:13:00)procedure TForm1.Button1Click(Sender: TObject);
var
A : array of array of Integer;
begin
SetLength(A,10);
SetLength(A[1],3);
A[1, 9] := 100; //почему проходит эта строка ??????
end;
Сразу говорю, что в настройках Exception-ы у меня включены.
В чём же дело товариши ?! Просто стало интересно...
PVOzerski (2002-06-25 14:34:00) [1]>при отключенном range checking это может пройти, если указанный
>адрес "разрешенный", т.е. входит в отведенное программе АП
Только можно ненароком, например, другой переменной значение "подправить" (особенно красиво получается в глобальных статических массивах, тогда мы работаем не с хипом, а с сегментом данных, поэтому получить exception оказывается сложнее - только если вылетишь за его пределы. Отлаживать - мечта...). Также душевно выходит вылезание за границы выделенного блока "на чуть-чуть", особенно, если длина этого блока определяется at run time и заранее неизвестна - тогда получается то exception, то всё OK (отчасти за счет выравнивания блока выделяемой памяти на DWORD на уровне API, отчасти по неведомым причинам). В общем, осторожность нужна и аккуратность.
Skier (2002-06-25 14:29:00) [2]> MBo
Ага. Точно.
Спасибо ещё раз.
MBo (2002-06-25 14:23:00) [3]при отключенном range checking это может пройти, если указанный адрес "разрешенный", т.е. входит в отведенное программе АП
а вот так попробуй
A[1, 11111119] := 100;// при некотором числе возникнет AV
Skier (2002-06-25 14:21:00) [4]> MBo
Всё понял. Спасибо.
Вопрос снят.
Skier (2002-06-25 14:19:00) [5]> aus
Я по всякому её пытал.
Очень всё-таки интересно почему если память не выделена под
A[1, 9] , то Exception не генерится ?!
MBo (2002-06-25 14:18:00) [6]project-options-compiler-range checking включил?
aus (2002-06-25 14:16:00) [7]Она наверное просто игнорируется, ты по шагам попробуй...