Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Runtime Error bei meiner Funktion (https://www.delphipraxis.net/41566-runtime-error-bei-meiner-funktion.html)

Neutral General 5. Mär 2005 10:47


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:
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;
Das Problem liegt nachweislich bei der Erzeugung der TDatei's.
Aber ich seh dadrin kein Problem :gruebel:

Die Muhkuh 5. Mär 2005 10:49

Re: Runtime Error bei meiner Funktion
 
Vielleicht solltest du die TDateien die du erstellt auch wieder free'en? ;)

Ultimator 5. Mär 2005 10:51

Re: Runtime Error bei meiner Funktion
 
[Falsch] [Doch Richtig]
Delphi-Quellcode:
for i := 1 to Loc.Count do begin
   Datei[i] := TDatei.Create;
Probiers mal so
Delphi-Quellcode:
for i := 0 to Loc.Count-1 do begin
   Datei[i] := TDatei.Create;
Da das erste Element den Index 0 hat, hat das letzte nicht den Index Lerngth, sondern Length-1 ;-)
[/Falsch] [/Doch Richtig]


Shit, hHast nicht Recht ;-)

Neutral General 5. Mär 2005 10:53

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 hier geklärt ;)

@ Spider : Dadran dürfte es aber normalerweise nicht liegen...
Außerdem wenn ich ins OnClose das schreibe :

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i : Integer;
begin
  for i := 1 to Length(Datei) do
  Datei[i].Free;
end;
bekomm ich ne Fehlermeldung "Ungültige Zeigeroperation" beim Beenden. :?

Bernhard Geyer 5. Mär 2005 10:56

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.

Die Muhkuh 5. Mär 2005 10:56

Re: Runtime Error bei meiner Funktion
 
hi,

es muss:

Delphi-Quellcode:
for I := 0 to High(Datei) do
  Datei[I].Free;
heißen

[edit]
@Bernhard
das hatten wir hier schonmal: http://www.delphipraxis.net/internal...&highlight=for

Neutral General 5. Mär 2005 10:57

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]

alcaeus 5. Mär 2005 11:01

Re: Runtime Error bei meiner Funktion
 
Delphi-Quellcode:
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;
So muesste das funktionieren...tuts jedenfalls bei mir.
Warum wollen alle ihre dynamischen Arrays von 1..Count ansprechen? :roll:

Greetz
alcaeus

Bernhard Geyer 5. Mär 2005 11:09

Re: Runtime Error bei meiner Funktion
 
Zitat:

Zitat von alcaeus
Warum wollen alle ihre dynamischen Arrays von 1..Count ansprechen? :roll:

Weil man im Mathematikunterricht erst die natürlichen Zahlen ohne Null gelernt bekommt (1..10).
Auch weil Delphi ein Mischmasch zwischen 0 und 1-Basierenden Elementen hat (String -> 1-Basierend, dynamisches Array -> 0-Basierend, ...)

alcaeus 5. Mär 2005 11:11

Re: Runtime Error bei meiner Funktion
 
Zitat:

Zitat von Bernhard Geyer
Auch weil Delphi ein Mischmasch zwischen 0 und 1-Basierenden Elementen hat (String -> 1-Basierend, dynamisches Array -> 0-Basierend, ...)

Ist zwar OT, aber nein. Strings (jedenfalls ShortStrings mit bis zu 255 Zeichen) sind auch 0-basiert. Auf das 0te Element kannst du nur nicht zugreifen, das ist das Laengenbyte. Die neuen Strings mit Kapazitaeten von bis zu 2GB arbeiten etwas komplizierter, aber ShortStrings sind definitiv 0-basiert.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:30 Uhr.
Seite 1 von 2  1 2      

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