![]() |
Runtime Error bei meiner Funktion
Wenn ich diese Funktion in meinem Programm aufrufe kommt ein Runtime Error wenn ich das Programm beende.
Delphi-Quellcode:
var Datei : Array of TDatei;
Delphi-Quellcode:
Das Problem liegt nachweislich bei der Erzeugung der TDatei's.
function Anzahl : Integer;
var loc : TStringlist; i : Integer; begin loc := TStringlist.Create; loc.LoadFromFile('dc.loc'); SetLength(Datei,Loc.Count); for i := 1 to Loc.Count do begin Datei[i] := TDatei.Create; end; Result := loc.Count; loc.Free; end; Aber ich seh dadrin kein Problem :gruebel: |
Re: Runtime Error bei meiner Funktion
Vielleicht solltest du die TDateien die du erstellt auch wieder free'en? ;)
|
Re: Runtime Error bei meiner Funktion
[Falsch] [Doch Richtig]
Delphi-Quellcode:
Probiers mal so
for i := 1 to Loc.Count do begin
Datei[i] := TDatei.Create;
Delphi-Quellcode:
Da das erste Element den Index 0 hat, hat das letzte nicht den Index Lerngth, sondern Length-1 ;-)
for i := 0 to Loc.Count-1 do begin
Datei[i] := TDatei.Create; [/Falsch] [/Doch Richtig] Shit, hHast nicht Recht ;-) |
Re: Runtime Error bei meiner Funktion
@ Ultimator : Ohh nein nicht schon wieder.
Ich les die Strings ja nicht ein -.- Ich will doch nur so viele TDatei's erstellen wie die Datei Zeilen hat. Das wurde aber schon ![]() @ Spider : Dadran dürfte es aber normalerweise nicht liegen... Außerdem wenn ich ins OnClose das schreibe :
Delphi-Quellcode:
bekomm ich ne Fehlermeldung "Ungültige Zeigeroperation" beim Beenden. :?
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i : Integer; begin for i := 1 to Length(Datei) do Datei[i].Free; end; |
Re: Runtime Error bei meiner Funktion
Ultimator hat schon recht, jedoch nicht nur bezüglich der Stringlist sondern auch deinem dynamischen Array.
Dieses hat eine Array-Gültigkeit von 0 bis Loc.Count-1. |
Re: Runtime Error bei meiner Funktion
hi,
es muss:
Delphi-Quellcode:
heißen
for I := 0 to High(Datei) do
Datei[I].Free; [edit] @Bernhard das hatten wir hier schonmal: ![]() |
Re: Runtime Error bei meiner Funktion
Ok dann beomm ich zwar nichtmehr den Zeigeroperationfehler aber der Runtimefehler bleibt :roll:
[Edit] Ok bei 0 to Loc.Count-1 gehts... Ist ja von der Anzahl das gleich wie 1 to Loc.Count. Bernhard hat doch Recht. Aber stimmt ja, ein dynamisches Array beginnt mit 0. :roll: [/edit] |
Re: Runtime Error bei meiner Funktion
Delphi-Quellcode:
So muesste das funktionieren...tuts jedenfalls bei mir.
function Anzahl : Integer;
var loc : TStringlist; i : Integer; begin loc := TStringlist.Create; loc.LoadFromFile('dc.loc'); SetLength(Datei,Loc.Count); for i := 0 to Loc.Count-1 do begin //Loc geht von 0 bis Loc.Count-1 Datei[i] := TDatei.Create; end; Result := loc.Count; loc.Free; end; Warum wollen alle ihre dynamischen Arrays von 1..Count ansprechen? :roll: Greetz alcaeus |
Re: Runtime Error bei meiner Funktion
Zitat:
![]() Auch weil Delphi ein Mischmasch zwischen 0 und 1-Basierenden Elementen hat (String -> 1-Basierend, dynamisches Array -> 0-Basierend, ...) |
Re: Runtime Error bei meiner Funktion
Zitat:
Greetz alcaeus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 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