AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Debugging: Zugriffsverletzung, Prüfen ob Punkt im Dreieck

Debugging: Zugriffsverletzung, Prüfen ob Punkt im Dreieck

Ein Thema von Shimau · begonnen am 8. Jun 2009 · letzter Beitrag vom 10. Jun 2009
 
Shimau

Registriert seit: 8. Jun 2009
Ort: Leipzig
14 Beiträge
 
Delphi 7 Personal
 
#1

Debugging: Zugriffsverletzung, Prüfen ob Punkt im Dreieck

  Alt 8. Jun 2009, 18:16
Wie gesagt ich bin beim Debuggen meines Progis und mich nervt so ne dumme 'Zugriffsverletzung bei Adresse 004034D3 ... Lesen von Adresse 0000BCF5'. Der Debugger stoppt hier:
Delphi-Quellcode:
program KunstmitdreiEcken;

uses
  Forms,
  Hauptanwendung in 'Hauptanwendung.pas{Form1},
  Komponenten in 'Komponenten.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end. //<-- hier stoppt der Debugger
Der Fehler liegt aber natürlich ungefähr 300 Zeilen weiter und in ner anderen Unit ^^:
Ich hab den Fehler lokalisiert und es liegt höchstwahrscheinlich an dieser Prozedur, jedenfalls wird bei der zeilenweisen Ausführung immer da die Fehlermeldung ausgegeben:

Delphi-Quellcode:
procedure TForm1.Auswahl1;
var a,b,c,d:integer; //Zählvariablen
    Dreieck: TDreieck; //Prüfvariable
    moeglich:boolean; //Prüfvariable
begin
  moeglich:=true; //Anfangsdeklaration
  Dreieck:=Dreieck.Create;
  for a:=0 to Length(Punkte)-3 do // <-- ab hier kommt dann der Fehler
  begin
    for b:=a+1 to Length(Punkte)-2 do
    begin
        for c:=b+1 to Length(Punkte)-1 do
        begin
          Dreieck.a:=Punkte[a];
          Dreieck.b:=Punkte[b];
          Dreieck.c:=Punkte[c];
          for d:=a+1 to c-1 do
          begin
            if (Punkte[d].Y<Dreieck.mab*Punkte[d].X+Dreieck.nab) and (Punkte[d].Y<Dreieck.mac*Punkte[d].X+Dreieck.nac)
            and(Punkte[d].Y>Dreieck.mcb*Punkte[d].X+Dreieck.ncb) and (d<>a) and (d<>b) and (d<>c) //Punkt im Dreieck und nicht ein Punkt vom Dreieck
            then
            begin
              moeglich:=false; //nicht möglich
              Break; //Schleife abbrechen
            end;
          end;
          if moeglich=true
          then
          begin
            SetLength(moglDE, Length(moglDE)+1); //1 neues Element hinzufügen
            moglDE[Length(moglDE)-1]:=moglDE[Length(moglDE)-1].Create;
            moglDE[Length(moglDE)-1]:=Dreieck; //Dreieck hinzufügen
          end
        end;
    end;
  end;
end;
Dazu ma ne kurze Erläuterung zur Klasse Dreieck:
Deklaration:

Delphi-Quellcode:
TDreieck = class
  public
    a:TPoint;
    b:TPoint;
    c:TPoint;
    function GetFA:real;
    function Getmab:real;
    function Getmac:real;
    function Getmcb:real;
    function Getnab:real;
    function Getnac:real;
    function Getncb:real;
    property FA:real read GetFA;
    property mab:real read Getmab;
    property mac:real read Getmac;
    property mcb:real read Getmcb;
    property nab:real read Getnab;
    property nac:real read Getnac;
    property ncb:real read Getncb;
  end;
mab, ... ist der Anstieg der Geradengleichung für die Gerade, wovon AB, ... eine Teilmenge ist
nab, ... ist der Versatz für Geradengleichung für die Gerade, wovon AB, ... eine Teilmenge ist

--> Geradengleichung in der Form f(x)=m*x+n

Ich habe keine Ahnung was der Debugger zu mäkeln hat, aber das Ergebniss gefällt mir ganz und gar nicht, denn ich habe keine Ausgabe und die Prozedur wird einfach abgebrochen.
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 20:23 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