• Твой профиль заполнен на 0%. Заполни за 1 минуту, чтобы тебя нашли единомышленники и работодатели. Заполнить →

Не Работает Динамический Массив 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

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →

Популярный контент

🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab