Pomotana tablica rekordów i głupi błąd... [diabe

0

Mam pewien problem... O... hehe właśnie odkryłem że podczas wpisywania postu jak Ctrl się naciście i przytrzyma ro dzieją się ciekawe rzeczy... np. szybciej kasuje się tekst :-D :-D

Dobra mam record

TCostam = record
Q1 : string;
Q2 :Integer;
end;

var
arr : array of TCostam;

procedure TForm1.Button1Click(Sender: TObject);
begin
arr[0].Q1 := 'rrrr';
arr[0].Q2 := 454;
end;

Po próbie wykonania tego kodu poprzez kliknięcie buttona widze błąd 'Access violation....' Czy da się to jakoś załatwić? Przecież to nie debugger zgłasza błąd tylko jakiś błąd w pamięci...

0

Musisz najpierw stworzyc jakies elementy w arr.
czyli:

SetLength(arr, 1); // ustawiasz dlugosc tablicy na 1-element

i wtedy gdy napiszesz arr[0].Q1 := 'qpa' to bedzie dzialac.
Jesli chcesz dodac jeden element do tablicy to:

SetLength(arr, High(arr) +2);

0

Czytelniej i sensowniej bedzie:
SetLength(arr, Length(arr)+1);
albo
SetLength(arr, Succ(Length(arr));

BTW, jesli z gory wiesz jak wielkosc tablicy jest Ci potrzebna, to od razy wal SetLength(arr, 534) a nie dodawaj po jednym.

0

Dzięki!! a co do mojej tablicy to zawiera taki rekord :-D

ProxClient = record
Conn : Boolean;
HCli : TIdTCPClient;
HCon : THandle;
Soc : TIdPeerThread;
Buff : array[0..2] of string;
end;

Jak widać dość ciekawy... więc nie chcę przesadzać bo jakby jeden serwer miał mieć podłączonych 500 socketów to :

1 użytkowników online, w tym zalogowanych: 0, gości: 1