• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Не Работает Динамический Массив Delphi

  • Автор темы Автор темы WingmanIX
  • Дата начала Дата начала
W

WingmanIX

Добрый день. Проблема вот в чем. Создаю динамический массив с помощью GetMem; при попытке обратиться к любому его элементу, кроме 1-ого, появляется ошибка Constant expression violates subrange bounds. Что делать?

Код:
implementation
{$R *.dfm}
{$R-}

procedure TForm1.FormCreate(Sender: TObject);
type
arr = array[1..1] of integer; 
p_arr = ^arr;
var
a:p_arr;
size:integer;
begin
size:=sizeOf(integer);
GetMem(a,5*size);

a[2]:=1;//ошибка: Constant expression violates subrange bounds

FreeMem(a,5*size);

end;

end.
 
может по другому обращаться к массиву?
вместо a[2]:=1 попробовать a^[2]:=1
и еще в объявлении массива убрать размерность:
вместо arr = array[1..1] of integer;
указать arr = array of integer;
 
В итоге, решение моего вопроса - индексировать элементы массива надо через переменную, тогда ошибки не будет:
Всем спасибо за ответы.
Код:
implementation
{$R *.dfm}
{$R-}


procedure TForm1.FormCreate(Sender: TObject);
type
arr = array[1..1] of integer; 
p_arr = ^arr;
var
a:p_arr;
size,i:integer;
begin
size:=sizeOf(integer);
GetMem(a,5*size);

i:=2;
a[i]:=1;//Теперь ошибки нет.

FreeMem(a,5*size);

end;

end.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab