![]() |
Frage zu dynamischen Variablen
hi leute
hab heute angefangen die variablen erstellung in einem selbstgemachten compiler mach das zum erstenmal und bekomme schon beim testen nen programmabsturz(AcessViolation) hier der code...
Delphi-Quellcode:
unit Parse;
interface uses Sysutils; type TParse = Class constructor Create; private procedure CreateVar(varT : Variant); public s : ^String; c : ^char; i : ^integer; r : ^real; b : ^boolean; arr : array of Variant; procedure get_setTyp(command : char;value : Variant); overload; procedure get_setTyp(command : char;value : char); overload; procedure freeAll; end; implementation constructor TParse.Create; begin new(i); new(r); new(b); new(S); new(c); end; procedure TParse.CreateVar(varT : Variant); begin setLength(arr, high(arr)+1); arr[high(arr)] := varT; end; procedure TParse.freeAll; begin dispose(i); dispose(r); dispose(b); dispose(S); dispose(c); end; procedure TParse.get_setTyp(command : char; value : Variant); begin case command of 's' : begin S^ := value; CreateVar(S^); end; 'i' : begin i^ := value; CreateVar(i^); end; 'r' : begin r^ := value; CreateVar(r^); end; 'b' : begin b^ := value; CreateVar(b^); end; end; end; procedure TParse.get_setTyp(command, value: char); begin c^ := value; CreateVar(c^); end; end. aufruf im testprogramm
Delphi-Quellcode:
unit Compiler;
interface uses Parse, SysUtils; implementation var p : TParse; begin p := TParse.Create(); p.get_setTyp('s', 'hiii'); p.freeAll; end. könnt ihr mir da helfen? danke Nicodius |
Re: Frage zu dynamischen Variablen
die Meldungen die kommen
: Zitat:
Zitat:
|
Re: Frage zu dynamischen Variablen
Hallo Nicodius!
So sieht also Dein dynamisches Array aus.
Delphi-Quellcode:
Du mußt schon vorher wissen, wie groß das Array "arr" werden soll. Wenn Du es dynamisch anlegst, muß zur Laufzeit zu dem Zeitpunkt, an dem das Array gebraucht wird, seine Größe bekannt sein. Wenn Du beispielsweise Deine 5 Variablen in diesem Variant-Array speichern
procedure TParse.CreateVar(varT : Variant);
begin setLength(arr, high(arr)+1); arr[high(arr)] := varT; end; willst, mußt Du 5 Elemente anlegen.
Delphi-Quellcode:
Statt der Zahl 5 mußt Du in Deinem Programm natürlich ne Zählvariable nehmen. Sonst kannste auch gleich ein statisches Array nehmen.
procedure TParse.CreateVar(varT : Variant);
begin setLength(arr, 5); arr[ { high(arr) } 5 ] := varT; //Ich glaube nicht, das die Funktion High() auf dynamische end; //Arrays anwendbar ist Ich hoffe, das hilft erst mal schöni |
Re: Frage zu dynamischen Variablen
DANKE!
dass ich das übersehen habe :roll: in der ersten test unit hatte ich das nämlich richtig :mrgreen: vielen dank für die schnelle kompetente hilfe! ps.: high kann man schon verwenden ;) |
Re: Frage zu dynamischen Variablen
Zitat:
1. High() ist auf dynamische Arrays anwendbar. 2. In deinem Beispiel müsste es
Delphi-Quellcode:
heißen, da der Index bei dynamischen Arrays immer von null bis n-1, also hier bis 4, läuft.
arr[4] := varT;
MfG Binärbaum |
Re: Frage zu dynamischen Variablen
Moin!
1. High() kann man sehr gut verwenden. 2. Das Problem liegt nur darin, das High() bei einem dyn. Array mit einer Länge von 0 eine -1 liefert. Das ist das Hauptproblem. So haut's hin:
Delphi-Quellcode:
MfG
procedure TParse.CreateVar(varT : Variant);
begin setLength(arr, Length(arr)+1); arr[high(arr)] := varT; end; Muetze1 |
Re: Frage zu dynamischen Variablen
thx!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz