AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Laufzeitfehler

Ein Thema von sebi87 · begonnen am 21. Apr 2008 · letzter Beitrag vom 21. Apr 2008
Antwort Antwort
sebi87
(Gast)

n/a Beiträge
 
#1

Laufzeitfehler

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


Danke
Sebastian
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Laufzeitfehler

  Alt 21. Apr 2008, 14:09
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.
Andreas
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#3

Re: Laufzeitfehler

  Alt 21. Apr 2008, 16:03
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Laufzeitfehler

  Alt 21. Apr 2008, 16:11
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 ?
Andreas
  Mit Zitat antworten Zitat
21. Apr 2008, 16:34
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
sebi87
(Gast)

n/a Beiträge
 
#6

Re: Laufzeitfehler

  Alt 21. Apr 2008, 17:09
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Laufzeitfehler

  Alt 21. Apr 2008, 19:22
ein etwas aussagekräftiger Threadtitel wäre wünchenswert, anstatt nur so ein dahingeworfenen Wort.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:58 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 by Thomas Breitkreuz