• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

gpatron

может по другому обращаться к массиву?
вместо a[2]:=1 попробовать a^[2]:=1
и еще в объявлении массива убрать размерность:
вместо arr = array[1..1] of integer;
указать arr = array of integer;
 
W

WingmanIX

В итоге, решение моего вопроса - индексировать элементы массива надо через переменную, тогда ошибки не будет:
Всем спасибо за ответы.
Код:
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.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!