|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Динамические массивы
Вообщем у меня проблемы с динамическими массивами... Есть несколько вопросов:
1) Для динамических массивов, со значениями типа Integer надо вручную распределять память? Они вроде и так работают. 2) У меня проблема при создании динамического массива, состоящего из record'ов. Как я ни пробовал распределить память, всё время кидает access violation по адресу 00000000. Как надо распределять память для динамического массива? |
#2
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMyRec = record ifield: Integer; sfield: ShortString; dfield: Double; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormPaint(Sender: TObject); private { Private declarations } public { Public declarations } arr: array of TMyRec; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin SetLength(arr, 2); arr[0].ifield:=1; arr[0].sfield:='hello'; arr[0].dfield:=3.14; arr[1].ifield:=2; arr[1].sfield:='world'; arr[1].dfield:=2.86 end; procedure TForm1.FormPaint(Sender: TObject); var i: Integer; begin for i:=0 to Length(arr)-1 do Canvas.TextOut(10, 10+i*Abs(Canvas.Font.Height), IntToStr(arr[i].ifield)+'='+arr[i].sfield+', '+FloatToStr(arr[i].dfield)); end; end. Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Спасибо. Значит у меня всё было правильно. Поковырялся в коде, выяснилось что переменной, которая определяла размер массива забыл присвоить значение. Получалось что размер массива был всегда равен нулю, а я думал что память под массив не распределена.
|