Zuerst einmal frage ich, ob es der oder das Array heißt?
Nun zum eigentlichen Punkt. Ich habe zwei Units und ein zweidimensionales dynamisches Array.
Das Erstellen des Arrays funktioniert soweit ganz gut. Erklären brauche ich das, denke ich mal nicht. Wenn Fragen sind, immer her damit.
Code: Alles auswählen
// Unit 1
procedure TFormTestErstellen.Button1Click(Sender: TObject);
var
TestArray : Array of Array[0..1] of String;
i : Integer;
begin
SetLength(TestArray, LVTest.Items.Count);
for i:=0 to High(TestArray) do
begin
// Daten aus der ListView LVTest in TestArray speichern
TestArray[i][0]:=LVTest.Items[i].Caption;
TestArray[i][1]:=LVTest.Items[i].SubItems[1];
// ShowMessage(TestArray[i][0]+' '+TestArray[i][1]);
// Für Testzwecke habe ich ShowMessage verwendet.
end;
// Übergabe des Arrays an Unit2 also uProzeduren
uProzeduren.Test(@TestArray);
// Array auf Null setzen.
SetLength(TestArray, 0);
end;
Code: Alles auswählen
// Unit 2
uses
Classes, SysUtils; // etc. pp.
type
TestArray = Array of Array of String;
procedure Test(TestAusgabe : TestArray);
implementation
uses
Unit1;
procedure Test(TestAusgabe : TestArray);
var
i : Integer;
begin
ShowMessage(IntToStr(Low(Produkte))+' | '+IntToStr(High(Produkte))); // Zum Testen, ob Low und High korrekt sind.
// Low ist bei 0 und High liegt bei 2951136, obwohl High bei 0 liegen müsste.
for i:=Low(TestAusgabe) to High(TestAusgabe) do
begin
ShowMessage(TestAusgabe[i][0]+' - '+TestAusgabe[i][1]);
end;
end;
TextAusgabe[1][0] - TextAusgabe[1][1] gibt er noch richtig aus. Was danach passiert, ist für mich nicht verständlich.
Er ruft danach weitere 4 mal ShowMessage auf mit einem Bindestrich. Danach kommt die Fehlermeldung: SIGSEGV bei Adresse 10000B0F5
Nun habe ich einfach mal getestet, ob Low(TestAusgabe) und Heigh(TestAusgabe) korrekt sind. Dabei fiel mir auf, dass Low(TestAusgabe) bei 0 liegt, was richtig ist, was mir jedoch spanisch vorkommt, ist die Tatsache, dass High(TestAusgabe) bei 2951136 liegt, obwohl High eigentlich davon abhängig ist, wie viele "Spalten" gegeben sind*. Woher die Zahl kommt, weiß ich nicht.
Selbst, wenn ich in der zweiten Unit das Array unter "´type" anpasse, also begrenze (ProduktArray = Array of Array[0..1] of String;), kommt die selbe Zahl (2951136) bei raus.
* Definition meines Arrays:
Array[0, 1] = Zeile 0, Spalte 1
Array[1, 1] = Zeile 1, Spalte 1
Anmerken möchte ich, dass ich mich heute zum ersten mal mit Arrays auseinandergesetzt habe. Also erwartet bitte von mir nicht allzu viel Fachwissen.
Hat jemand eine Idee?