Hallo Leute
Bin neu hier auf den Boards... sorry dass ich gleich mit einer etwas komplizierteren Frage komme. Werde mich auch erkenntlich zeigen
Hier mein Problem:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| type Rec = record S : String; C : Char; end;
var var1 : Rec = (S: ''; C: #1); var2 : Array[0..1] of Integer = (123,456); var3 : Array of Integer = @var2;
procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage( IntToStr(var3[0])+ '/'+ IntToStr(var3[1]) ); end; |
Wenn ich den obigen Code ausführe, dann funktioniert alles wunderbar. Wenn ich das Programm aber schliesse, dann gibts ne Exception. Sieht so aus, als ob sich Delphi7 da beim Releasen des Speichers etwas vertut. Ist das nur auf meinem PC so oder bekommt ihr auch ne Exception wenn man das Programm ausführt und wieder schliesst?
Ich denke mal, es könnte was mit dem Initialisieren des dynamischen Arrays zu tun haben. Darf man das überhaupt?
"var1" hat mit dem Problem wahrscheinlich nichts zu tun, bringt aber den Fehler zum Vorschein. Wenn man "C: #1" in "C: #2" ändert, dann kommt der Fehler nicht mehr vor (was ja aber nicht die Lösung sein kann).
Vielleicht erkläre ich besser mal, wieso ich das mit dem dynamischen Array überhaupt mache. Hier ein funktionierendes Code-Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type Refs = record ID : String; Ptr : Array of Cardinal; end;
const Term = 0;
var varx : Array[0..3] of Cardinal = (1,2,3,Term); vary : Array[0..5] of Cardinal = (5,4,3,2,1,Term);
RefTable : Array[0..1] of Refs = ( (ID: 'ID1'; Ptr: @varx), (ID: 'ID2'; Ptr: @vary) ); |
Ich möchte eine Sammlung von Konstanten in meinem Quellcode unterbringen. Zur Laufzeit wird dann entschieden, welche Konstanten relevant sind. Wenn zur Laufzeit die Konstanten von ID1 verwendet werden sollen, dann greift das Programm über den Pointer auf das richtige Array mit den Konstanten zu.
So war zumindest die Ausgangslage, die zu dem Fehler geführt hat. Ich hab dann den Code soweit vereinfacht, bis ich das Problem im oberen Codeschnipsel isolieren konnte.
Mein Ziel ist es schon, die Konstanten im Programm selber unterzubringen, ohne externe Dateien oder Datenbanken. Es wäre auch unschön, die Konstanten zur Laufzeit zu initialisieren (begin myarray[1][1]:=1; myarray[1][2]:=2; end; usw...).
Irgendwelche Ideen?
Moderiert von
Peter Lustig (17:01, 22.05.2004): Code- durch Delphi-Tags ersetzt