В VCL, TByteDynArray
определяется как динамический массив:Почему доступ к индексам за пределами границ динамического массива не повышает AV?
type TByteDynArray = array of Byte;
Но мне кажется, что индекс оценки проверка не выполняется:
var
DataBytes: System.Types.TByteDynArray;
i: Integer;
begin
SetLength(DataBytes, 2);
DataBytes[5] := 222; // Accessing index beyond set length.
i := DataBytes[5]; // `i` is now set to "222".
Код выше работает без ошибок.
Почему нет AccessViolation
поднятых, как со статическим массивом? Какова точка SetLength
, если вы можете получить доступ и изменить 65536 байт памяти переменной массива независимо от установленной длины?
диапазона по умолчанию отключена; используйте '$ r +', чтобы включить его – fantaghirocco
* Приведенный выше код работает без ошибок. * Возможно. Возможно, нет. Независимо от того, есть или нет, ошибка не предсказуема. –
@DavidHeffernan Из теста, который я сделал, он воспроизводимо не вызывает ошибки. Какую ошибку можно было бы повысить? – DBedrenko