Hallo Bug,
solltest du beim Anfordern/Freigeben des Speichers den Wert
size nicht mit der Elementgröße (=SizeOf(Word)) multiplizieren? Oder gibt
size gar nicht die Anzahl der Elemente sondern die Arraygröße in Bytes an?
Das interne Feld
size wird im Konstruktor nicht initialisiert.
Dein Pointer-Problem kannst du ganz einfach umgehen, indem du das Feld
data direkt als Zeiger auf ein Array vereinbarst:
Delphi-Quellcode:
type
// möglicherweise auch bei Delphi3 schon in SysUtils vereinbart...
PWordArray = ^TWordArray;
TWordArray = array [0..(MaxInt div SizeOf(Word)) - 1] of Word;
TDynArray = class
private
FCapacity : Cardinal;
FData : PWordArray;
public
constructor Create (Capacity: Cardinal);
destructor Destroy; override;
function GetWord (Index: Cardinal): Word;
end;
constructor TDynArray.Create (Capacity: Cardinal);
begin
inherited Create;
GetMem (FData, Capacity * SizeOf(Word));
FCapacity := Capacity;
end;
destructor TDynArray.Destroy;
begin
FreeMem (FData, FCapacity * SizeOf(Word));
inherited;
end;
function TDynArray.GetWord (Index: Cardinal): Word;
begin
Result := FData[Index];
end;
Gruß Hawkeye