AGB  ·  Datenschutz  ·  Impressum  







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

Zugriffsverletzung

Ein Thema von Hybrid666 · begonnen am 4. Jun 2008 · letzter Beitrag vom 4. Jun 2008
Antwort Antwort
Seite 1 von 2  1 2      
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#1

Zugriffsverletzung

  Alt 4. Jun 2008, 12:30
Servus,

ich schreibe grade ein kleines netzwerk spiel und ich bekomme ab und zu einen fehler an einer stelle im code, die sehr oft ausgeführt wird. Der fehler wird manchmal erhoben, wie gesagt, die prozedur wird verdammt oft ausgeführt. wenn aber der fehler einmal geraised war, wird er JEDESMAL wenn die prozedur ausgeführt wird, wieder erhoben.

Hier die prozedur:
Delphi-Quellcode:
function TForm1.CheckWin (WinColor : TColor) : Boolean;
var
   I, J : Integer;
   HasWon : Boolean;
begin
   HasWon := False;
   for I := 1 to 5 do
   begin
      for J := 1 to 4 do
      begin
         try
         if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I + 1))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I + 2))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I + 3))).Color = WinColor) then
               HasWon := True;
         if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 1) + IntToStr (I + 1))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 2) + IntToStr (I + 2))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 3) + IntToStr (I + 3))).Color = WinColor) then
               HasWon := True;
         if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 1) + IntToStr (I))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 2) + IntToStr (I))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 3) + IntToStr (I))).Color = WinColor) then
               HasWon := True;
         finally
         end;
      end;
   end;
   for I := 4 to 8 do
   begin
      for J := 4 to 7 do
      begin
         try
         if (TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 1) + IntToStr (I - 1))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 2) + IntToStr (I - 2))).Color = WinColor) and
            (TPanel (FindComponent ('p' + IntToStr (J + 3) + IntToStr (I - 3))).Color = WinColor) then
               HasWon := True;
         finally
         end;
      end;
   end;
   result := HasWon;
end;
Der fehler tritt immer in den FindComponents auf, die panels existieren auch alle, die er prüft.

Der Fehler:
Zitat:
Access violation at Address <ADDRESSE>. Read of Address <ADRESSE>
Warum wird er erhoben? greife ich zu schnell auf findcomponent zu? Habe es mal in try .. finally blocks gesetzt, allerdings raised er den fehler TROTZDEM!

Danke für die Hilfe.

MfG

[edit=SirThornberry] Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.188 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 12:36
Zitat von Hybrid666:
Habe es mal in try .. finally blocks gesetzt, allerdings raised er den fehler TROTZDEM!
Dann schau dir mal die Sprachdefinition für try...finally an. Was du willst ist ein try...except-Block.

Ansonsten: Wieso speicherst du dir nicht alle Controls in einem (hier 4*5 großen) Array (array[1..5, 1..4] of TPanel?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#3

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 12:47
Also, mit try except kommt der fehler nicht mehr, allerdings wird die prozedur trotzdem nicht komplett ausgeführt, da er, auch wenn alle gewinnbedingungen erfüllt sind, nicht erkennt das jemand gewonnen hat. wo rührt der fehler her?
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:00
Dann versuche mal nicht direkt auf TPanel zu casten, sondern den as-Operator zu verwenden... wenn beim Cast ein fehler auftritt kommt dann eine aussagekräftigere Fehlermeldung.
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.273 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:02
Hallo,

Die Anzahl der Panels ist wohl dynamisch ?
FindComponent kann auch NIL sein.
Ich würde die Panela zumindestens beim Start der Prozedur einmal ermitteln

Delphi-Quellcode:
var
  Panel1_1, Panel1_2... : TPanel;
begin
  Panel1_1_1:= TPanel (FindComponent ('p' + IntToStr (J) + IntToStr (I)));
  Assert(Panel1_1_1<>NIL);

per Assert findest du dann deinen NIL Zugriff.


Heiko
Heiko
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#6

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:17
nein, die anzahl ist nich dynamisch, es gibt 8 spalten a 7 zeilen. die panels sind mit x und y koordinate nummeriert, also p11, p12, p13 usw...also kann ich 100%ig sagen das alle panels auf die ich zugreife auch existiert.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#7

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:23
Werden die Panels automatisch angelegt oder hast du das im Designer gemacht? Bei letzterem könntes du dich evtl. mit der Namensgebung vertan haben?
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:27
Hai Hybrid666,

mal unabhängig von dem direkten Problem:

Ich würde nicht über die Farbe der Panels auswerten ob ein "Spiel" gewonnen wurde.
Wenn Du weisst das es eine Matrix 8x7 gibt würde ich einfach ein zweidimensionales Array definieren und dort eintragen welche Felder richtig sind.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Hybrid666

Registriert seit: 15. Jul 2006
Ort: Erster Stock
250 Beiträge
 
Delphi 7 Personal
 
#9

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:29
Zitat von tomsel:
Werden die Panels automatisch angelegt oder hast du das im Designer gemacht? Bei letzterem könntes du dich evtl. mit der Namensgebung vertan haben?
Ich hab sie im designer gemacht und die namen schon 3 mal überprüft.
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#10

Re: Unbekannter Fehler

  Alt 4. Jun 2008, 13:36
OK, OK, War nur so ne Idee...

Dann ermittle doch zunächst mal die genaue Fehlerpostition. Mit zusätzlichem Code, durch teilweises auskommentieren, oder aktiviere die Sprachexceptions in den Debuggeroptionen, oder..., oder... oder...
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:58 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