Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EInvalidPointer bei rekursiver Funktion (https://www.delphipraxis.net/173841-einvalidpointer-bei-rekursiver-funktion.html)

imagirom 20. Mär 2013 12:38

Delphi-Version: 5

EInvalidPointer bei rekursiver Funktion
 
Ich schreibe ein Programm, um Bezier-Kurven beliebeigen Grades darzustellen, erhalte aber immer den Fehler 'Ungültige Zeigeroperation'. Ich hab schon im Forum gesucht, und vermute, dass es mit den Arrays zu tun hat. Kann mir jemand helfen?

Code:
function TForm1.bezier(Punkte:array of real;t:real):real;
var Punkte1,Punkte2:array of real;
    i:integer;
    a,b,c:real;
begin
     if length(Punkte)=1 then
     begin
          c:=Punkte[0];
     end
     else begin
          setlength(Punkte1,length(Punkte)-1);
          setlength(Punkte2,length(Punkte)-1);
          for i:=0 to length(Punkte)-1 do
          begin
               Punkte1[i]:=Punkte[i];
               Punkte2[i]:=Punkte[i+1];
          end;
          a:=bezier(Punkte1,t);
          b:=bezier(Punkte2,t);
          c:=(1-t)*a+t*b;
     end;

     result:=c;
end;

DeddyH 20. Mär 2013 12:53

AW: EInvalidPointer bei rekursiver Funktion
 
Schalt mal die Bereichsprüfung ein.
Zitat:

Delphi-Quellcode:
for i:=0 to length(Punkte)-1 do
          Punkte2[i]:=Punkte[i+1];

Das knallt beim letzten Durchlauf, da Du über die Grenzen von Punkte hinaus liest.

P.S.: Sry. Willkommen in der DP :dp:

gammatester 20. Mär 2013 12:54

AW: EInvalidPointer bei rekursiver Funktion
 
Delphi-Quellcode:
Punkte:array of real;
ist kein dynamisches Array! Definiere und verwende einen eigenen Typ:
Delphi-Quellcode:
type
  TMyArray = array of real;

imagirom 20. Mär 2013 13:14

AW: EInvalidPointer bei rekursiver Funktion
 
Oh Gott, ich bin dumm. Das mit dem Zählen ab 0 ist schon schwer.. (mit for i=0 to length(Punkte)-2 hat es sofort funktioniert)
Danke Detlef!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz