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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.03.2014, 21:17   #1
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию Ошибка при работе с указателями

Здравствуйте. Пытаюсь выделить память под массив, но выдает ошибку. Порой на "GetMem", порой на "Foo^[0].Bar1:=1".
Подскажите, может, я не правильно пытаюсь выделить память под массив записей?

Код:
procedure Something;
type
  TBar = record
  Bar1: Word; Bar2: Cardinal;
  end;

  TFoo = array of TBar;
  PFoo = ^TFoo;

var
Foo: PFoo;
Temp: Byte;
begin
GetMem(Foo, 3*SizeOf(TBar));

Foo^[0].Bar1:=1;
Foo^[1].Bar1:=10;
Foo^[2].Bar1:=100;

Temp:=Foo^[0].Bar1 + Foo^[1].Bar1 + Foo^[2].Bar1;
end;
Alexan-Dwer вне форума Ответить с цитированием
Старый 08.03.2014, 21:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
array of TBar;
Если не ошибаюсь это и есть указатель. т.е. в твоем случае нужно так:
Код:
procedure Something;
type
  TBar = record
  Bar1: Word; Bar2: Cardinal;
  end;

  TFoo = array[0..0] of TBar;
  PFoo = ^TFoo;

var
Foo: PFoo;
Temp: Byte;
begin
GetMem(Foo, 3*SizeOf(TBar));

Foo^[0].Bar1:=1;
Foo^[1].Bar1:=10;
Foo^[2].Bar1:=100;

Temp:=Foo^[0].Bar1 + Foo^[1].Bar1 + Foo^[2].Bar1;
end;
Хотя это костыльный вариант и он морально устарел. Сейчас модно так:
Код:
procedure Something;
type
  TBar = record
  Bar1: Word; Bar2: Cardinal;
  end;

  TFoo = array of TBar;
var
Foo: TFoo;
Temp: Byte;
begin
SetLength(Foo, 3);

Foo[0].Bar1:=1;
Foo[1].Bar1:=10;
Foo[2].Bar1:=100;

Temp:=Foo[0].Bar1 + Foo[1].Bar1 + Foo[2].Bar1;
SetLength(Foo,0);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.03.2014, 22:38   #3
Alexan-Dwer
Форумчанин
 
Аватар для Alexan-Dwer
 
Регистрация: 20.04.2009
Сообщений: 136
По умолчанию

Stilet, спасибо, Ваш код компилируется без ошибок. Выбрал 2-ой способ.
Alexan-Dwer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе с указателями в C# Igor95 C# (си шарп) 4 05.11.2013 15:19
Ошибка при работе с строками в Си papos Помощь студентам 1 23.03.2011 03:50
Ошибка при работе с потоком Claster Помощь студентам 1 14.10.2009 16:06
Ошибка при работе с файлом LeoN Общие вопросы Delphi 1 07.12.2007 15:21
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10