Autor Beitrag
EUOCheffe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Sa 22.05.04 15:54 
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:

ausblenden 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:

ausblenden 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 user profile iconPeter Lustig (17:01, 22.05.2004): Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von EUOCheffe am Sa 22.05.04 16:29, insgesamt 1-mal bearbeitet
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Sa 22.05.04 16:15 
Verwende keinen dyn. Array, sondern einen Zeiger auf einen Array.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
type
  PDWordArray = ^TDWordArray;
  TDWordArray = array[0..8191] of DWord;

  Refs = record
    ID  : String;
    Ptr : PDWordArray ;
  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)
  );

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
EUOCheffe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: Sa 22.05.04 16:28 
Perfekt, vielen Dank für die schnelle Antwort. Wollte die dynamischen Arrays als Pointer auf Arrays missbrauchen, aber anscheinend gibt er den Speicher des referenzierten statischen Arrays dann doppelt frei. :)
Motzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: Sa 22.05.04 16:38 
Ganz genau.. dynamische Arrays unterliegen eben Spezialbehandlungen die den normalen Umgang mit ihnen vereinfachen sollen.. ;)

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!