Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Laufzeitfehler (https://www.delphipraxis.net/112436-laufzeitfehler.html)

sebi87 21. Apr 2008 12:29


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:
  SetLength(HilfArray, high(AArray) + 1 + high(BArray) + 1) ;
auf. Wie kann ich das beheben?


Danke
Sebastian

shmia 21. Apr 2008 13:09

Re: Laufzeitfehler
 
Delphi-Quellcode:
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) ;
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.
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.

sebi87 21. Apr 2008 15:03

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:
  SetLength(HilfArray1, high(AArray) + 1 - Stelle) ;
  SetLength(HilfArray2, high(AArray) + 2) ;
auf diesen dämlichen Laufzeitfehler.

shmia 21. Apr 2008 15:11

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 21. Apr 2008 15:34

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

sebi87 21. Apr 2008 16:09

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

Luckie 21. Apr 2008 18:22

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