![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
|||
|
|||
|
Спасибо. Значит у меня всё было правильно. Поковырялся в коде, выяснилось что переменной, которая определяла размер массива забыл присвоить значение. Получалось что размер массива был всегда равен нулю, а я думал что память под массив не распределена.
|