Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2013, 17:25   #1
WingmanIX
 
Регистрация: 26.08.2013
Сообщений: 4
По умолчанию Не работает динамический массив Delphi

Добрый день. Проблема вот в чем. Создаю динамический массив с помощью 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.
WingmanIX вне форума Ответить с цитированием
Старый 01.12.2013, 17:27   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
 a:array of integer;
begin
SetLength(a,5);
 a[2]:=1;//И не волать вола с GetMem

SetLength(a,0);

end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2013, 19:12   #3
WingmanIX
 
Регистрация: 26.08.2013
Сообщений: 4
По умолчанию

У преподавателя в методичке именно такой код, менять нельзя
У моих одногруппников код работает, а у меня нет.
WingmanIX вне форума Ответить с цитированием
Старый 01.12.2013, 19:26   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Навряд-ли такой код. Там должно быть
arr = array[1..5] of integer;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.12.2013, 20:06   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Там должно быть
Неа. Фишка именно в том что это массив указателей. Есть такое.
попробуй a[2]^:=1;

ПримеР: http://www.programmersforum.ru/showthread.php?t=47171
I'm learning to live...

Последний раз редактировалось Stilet; 01.12.2013 в 20:08.
Stilet вне форума Ответить с цитированием
Старый 20.12.2013, 22:52   #6
WingmanIX
 
Регистрация: 26.08.2013
Сообщений: 4
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировки и динамический массив(Delphi) boberb Помощь студентам 7 20.03.2012 04:49
Динамический массив в Delphi kop Помощь студентам 1 29.10.2011 21:15
прога на динамический массив на Delphi realinkxxx Помощь студентам 2 29.04.2010 03:55
Динамический массив и FileMapping (delphi) bug Win Api 0 08.10.2009 18:42