1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

Тема в разделе "Вопросы новичков и не только", создана пользователем WingmanIX, 1 дек 2013.

  1. WingmanIX

    WingmanIX New Member

    Репутация:
    0
    Регистрация:
    26 авг 2013
    Сообщения:
    3
    Симпатии:
    0
    Добрый день. Проблема вот в чем. Создаю динамический массив с помощью 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.
     
  2. gpatron

    gpatron Active Member

    Репутация:
    0
    Регистрация:
    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

    Репутация:
    0
    Регистрация:
    26 авг 2013
    Сообщения:
    3
    Симпатии:
    0
    В итоге, решение моего вопроса - индексировать элементы массива надо через переменную, тогда ошибки не будет:
    Всем спасибо за ответы.
    Код:
    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.
     
Загрузка...
Похожие Темы - Не Работает Динамический
  1. nerfy
    Ответов:
    15
    Просмотров:
    121
  2. NetHunteRed
    Ответов:
    0
    Просмотров:
    33
  3. abdurtim
    Ответов:
    8
    Просмотров:
    299
  4. ghostphisher
    Ответов:
    26
    Просмотров:
    791
  5. seoman2
    Ответов:
    5
    Просмотров:
    297

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