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

Тема в разделе "Pascal and Delphi", создана пользователем WingmanIX, 1 дек 2013.

  1. WingmanIX

    WingmanIX New Member

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

    Код (Delphi):
    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.
     
  2. gpatron

    gpatron Active Member

    Регистрация:
    13 авг 2009
    Сообщения:
    26
    Симпатии:
    0
    может по другому обращаться к массиву?
    вместо a[2]:=1 попробовать a^[2]:=1
    и еще в объявлении массива убрать размерность:
    вместо arr = array[1..1] of integer;
    указать arr = array of integer;
     
  3. WingmanIX

    WingmanIX New Member

    Регистрация:
    26 авг 2013
    Сообщения:
    3
    Симпатии:
    0
    В итоге, решение моего вопроса - индексировать элементы массива надо через переменную, тогда ошибки не будет:
    Всем спасибо за ответы.
    Код (Delphi):
    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.
     
Загрузка...

Поделиться этой страницей