![]() |
Laufzeitfehler
Hallo Leute,
kann mir jemand sagen warum ich bei mehrmaligem Aufruf von der Funktion (hintereinander aufrufen) einen Laufzeitfehler bekomme? Die Funktion ist:
Delphi-Quellcode:
// Funktion zum verbinden von 2 Punkt-Array's
function ArrayConnect(AArray, BArray : TPointArray) : TPointArray ; var n : integer ; i : integer ; HilfArray : TPointArray ; begin SetLength(HilfArray, high(AArray) + 1 + high(BArray) + 1) ; for n := 0 to high(AArray) do begin HilfArray[n] := AArray[n] ; end ; i := 0 ; for n := high(AArray) + 1 to high(AArray) + high(BArray) + 1 do begin HilfArray[n] := BArray[i] ; i := i + 1 ; end ; result := HilfArray ; end ; // Funktion zum einfügen eines Punkts in ein Punkt-Array function ArrayInsPoint(AArray : TPointArray; APoint : TPoint; Stelle : Integer) : TPointArray ; var n : integer ; HilfArray1, HilfArray2 : TPointArray ; begin SetLength(HilfArray1, high(AArray) + 1 - Stelle) ; SetLength(HilfArray2, high(AArray) + 2) ; // Kopieren des Anfangs if Stelle <> 0 then begin for n := 0 to Stelle - 1 do begin HilfArray2[n] := AArray[n] ; end ; end ; if Stelle < high(AArray) then begin for n := Stelle to high(AArray) + 1 do begin HilfArray1[n - Stelle] := AArray[n] ; end ; end ; // Einfügen der Zahl HilfArray2[Stelle] := APoint ; // Einfügen des Rests if Stelle < high(AArray) then begin for n := 0 to high(HilfArray1) + 1 do begin HilfArray2[n + Stelle + 1] := HilfArray1[n] ; end ; end ; result := HilfArray2 ; end ; Ich hab nachgeforscht und der Laufzeitfehler tritt bei dem
Delphi-Quellcode:
auf. Wie kann ich das beheben?
SetLength(HilfArray, high(AArray) + 1 + high(BArray) + 1) ;
Danke Sebastian |
Re: Laufzeitfehler
Delphi-Quellcode:
Wenn du öfters Punkte in das Array einfügen musst (und es sieht ganz danach aus), ist eine von TList abgeleitetete Klasse viel geschickter als ein Array.
function ArrayConnect(AArray, BArray : TPointArray) : TPointArray ;
var n : integer ; i : integer ; HilfArray : TPointArray ; begin Assert(Assigned(AArray)); // Zur Sicherheit prüfen, ob Assert(Assigned(BArray)); // die Arrays überhaupt angelegt sind SetLength(HilfArray, high(AArray) + 1 + high(BArray) + 1) ; Also anstatt jetzt nach einem Fehler zu suchen, würde ich dir empfehlen eine Klasse TPointList zu entwickeln, da dies die Softwarequalität erhöht. Wenn du trotzdem beim Array bleiben möchtest, würde ich dir empfehlen, die Arrays nicht direkt zu verwenden, sondern sauber in einer Klasse zu kapseln. |
Re: Laufzeitfehler
Wenn ich sicherstelle das die Arrays vorhanden sind funktioniert die 1.Funktion, bei der 2. jedoch läuft es immer bei
Delphi-Quellcode:
auf diesen dämlichen Laufzeitfehler.
SetLength(HilfArray1, high(AArray) + 1 - Stelle) ;
SetLength(HilfArray2, high(AArray) + 2) ; |
Re: Laufzeitfehler
Deine 2. Funktion (wir sollten ruhig den Namen nennen: function ArrayInsPoint) ist ziemlich ungeschickt programmiert.
Du brauchst doch nur das Input-Array um Eins verlängern: SetLength(AArray, Length(AArray) + 1) und dann alle Einträge von "stelle" an um ein nach hinten verschieben. Diese Hilfsarrays sind dann völlig überflüssig (sie stören vorallem auch den Memory-Manager von Delphi !) Aber du hast gar nichts über meinen Hinweis zu TList gesagt. Willst du meine Hilfe nicht annehmen ? |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: Laufzeitfehler
Der Hinweis mit TList ist sehr schön muss ich mir mal überlegen wie ich das am besten in mein Programm einbaue.
Danke für die Hilfe |
Re: Laufzeitfehler
ein etwas aussagekräftiger Threadtitel wäre wünchenswert, anstatt nur so ein dahingeworfenen Wort.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 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