AGB  ·  Datenschutz  ·  Impressum  







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

EInvalidPointer bei rekursiver Funktion

Ein Thema von imagirom · begonnen am 20. Mär 2013 · letzter Beitrag vom 20. Mär 2013
Antwort Antwort
imagirom

Registriert seit: 20. Mär 2013
2 Beiträge
 
#1

EInvalidPointer bei rekursiver Funktion

  Alt 20. Mär 2013, 13:38
Delphi-Version: 5
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;

Geändert von imagirom (20. Mär 2013 um 14:05 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

AW: EInvalidPointer bei rekursiver Funktion

  Alt 20. Mär 2013, 13:53
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#3

AW: EInvalidPointer bei rekursiver Funktion

  Alt 20. Mär 2013, 13:54
Punkte:array of real; ist kein dynamisches Array! Definiere und verwende einen eigenen Typ:
Delphi-Quellcode:
type
  TMyArray = array of real;

Geändert von gammatester (20. Mär 2013 um 13:59 Uhr) Grund: Fehler in Typdeklaration
  Mit Zitat antworten Zitat
imagirom

Registriert seit: 20. Mär 2013
2 Beiträge
 
#4

AW: EInvalidPointer bei rekursiver Funktion

  Alt 20. Mär 2013, 14:14
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!!
  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 07:51 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