AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffsverletzung / EAccessViolation => Brauche Hilfe
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung / EAccessViolation => Brauche Hilfe

Ein Thema von qb-tim · begonnen am 9. Jan 2008 · letzter Beitrag vom 11. Jan 2008
Antwort Antwort
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#1

Zugriffsverletzung / EAccessViolation => Brauche Hilfe

  Alt 9. Jan 2008, 17:07
Hi,

für einer meiner Programme habe ich bei einem OnClick folgenden Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x, y, z, count: Integer;
begin
  ResetPossible();
  for y := 1 to 9 do
    for x := 1 to 9 do
      if StringGrid1.Cells[x-1, y-1] <> 'then
      begin
        Preset[x, y] := True;
        for z := 1 to 9 do
          Possible[x, y, z] := False;
      end else
        Preset[x, y] := False;
  for y := 1 to 9 do
    for x := 1 to 9 do
      if Preset[x, y] then
        ExcludeAll(x, y, StrToInt(StringGrid1.Cells[x-1, y-1]));
  for y := 1 to 9 do
    for x := 1 to 9 do
      if not Preset[x, y] then
      begin
        count := 0;
        for z := 1 to 9 do
          if Possible[x, y, z] then
            count := count + 1;
        if count = 1 then
          for z := 1 to 9 do
            if Possible[x, y, z] then
              StringGrid1.Cells[x-1, y-1] := IntToStr(z);
      end;
end;
Leider gibt es da ein großes Problem... Jedesmal, wenn die Prozedur fertig ist kommen tausende Zugriffsverletzungs-Meldungen ("EAccessViolation"). Mir ist das unverständlich... Kann mir jemand vielleicht helfen...

Globale Variablen:
Delphi-Quellcode:
var
  Possible: Array[1..9, 1..9, 1..9] of Boolean;
  Preset: Array[1..9, 1..9] of Boolean;
StringGrid1:
=> Hat immer 9 Spalten und 9 Reihen
=> Cells enthalten immer nur ein Integer

Prozeduren:
ResetPossible => Setzt alle Possible-Booleans auf True
ExcludeAll => Auswertung des in der Tabelle vorkommenden Integers
(In beiden Prozeduren kommt kein Fehler jemals vor)


Ich habe überprüft wo genau der Fehler liegen könnte und bemerkt, dass es erst auftritt nachdem die gesamte Prozedur abgehandelt wurde... (Breakpoint auf den letzten 'end;' der Prozedur gesetzt => Bis dahin kein Fehler, danach ja).

Außerdem: Der Fehler markiert immer das 'end.' nach 'Application.Run;' in der dpr Datei.


Ich wäre für jede Hilfe äußerst dankbar...
  Mit Zitat antworten Zitat
shmia

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

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 9. Jan 2008, 17:29
Versuche doch einfach mal vorzeitig mit Exit aus der Prozedur rauszuspringen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x, y, z, count: Integer;
begin
  Assert(Assigned(self)); // Sicherheits Check
  Assert(Assigned(StringGrid1)); // Sicherheits Check #2

  ResetPossible();
 
  Exit; // NUR ZUM TEST !!!

  for y := 1 to 9 do
    for x := 1 to 9 do
       ...
Wenn es keine Fehler gibt, wird die Exit Anweisung nach unten verschoben, bis der Fehler wieder auftritt.
So wird der Fehler eingegrenzt.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#3

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 10. Jan 2008, 09:24
Hmmm... interessant. Wenn ich 'exit;' nach 'ResetPossible' setzte gibt es schon die Fehlermeldungen...

In meiner Prozedur 'ResetPossible' habe ich ein paar Variablen falsch eingesetzt ; Die Zahlen waren so außerhalb des definierten Zählbereichs des Array, der da gesetzt wird ;

Danke für die Hilfe, shmia

  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 10. Jan 2008, 09:38
Ich rate dir dringends dazu in den Projektoptionen die Bereichsprüfung einzuschalten und das Projekt neu zu erstellen. Dann bekommst du bei einem solchen falschen Zugriff direkt den Fehler an der Stelle des Zugriff und bemerkst sowas deutlich früher. Dann können AV's dadurch nicht entstehen.
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#5

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 10. Jan 2008, 09:43
Das mit der Bereichsprüfung habe ich noch nicht gewusst

Die Hilfe sagt dazu:
Zitat:
Die Aktivierung der Bereichsprüfung vergrößert und verlangsamt Ihr Programm.
Wirkt sich das sehr stark aus?
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 10. Jan 2008, 09:45
Zitat von xX0815Xx:
Das mit der Bereichsprüfung habe ich noch nicht gewusst

Die Hilfe sagt dazu:
Zitat:
Die Aktivierung der Bereichsprüfung vergrößert und verlangsamt Ihr Programm.
Wirkt sich das sehr stark aus?
Das machst du ja nur zum Debuggen und schaltest es später wieder ab.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Aurelius
Aurelius

Registriert seit: 29. Jan 2007
Ort: Erfurt
753 Beiträge
 
Delphi 7 Personal
 
#7

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 10. Jan 2008, 09:48
Ach so, dann wird das jetzt immer aktiviert ^^
Jonas
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 10. Jan 2008, 10:32
wie sieht ResetPossible() aus und warum verwendest du globale Variablen wenn du sie in der Klasse verwendest?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von qb-tim
qb-tim

Registriert seit: 3. Mär 2006
Ort: Deutschland
280 Beiträge
 
Delphi 6 Professional
 
#9

Re: Zugriffsverletzung / EAccessViolation => Brauche Hilf

  Alt 11. Jan 2008, 09:55
Zitat von SirThornberry:
warum verwendest du globale Variablen wenn du sie in der Klasse verwendest?
Andere Knöpfe - Andere Prozeduren... Einige Sachen meines Programms laufen nicht immer in Form1 ab

Zitat von SirThornberry:
wie sieht ResetPossible() aus?
Vorhin:

Delphi-Quellcode:
procedure TForm1.ResetPossible();
var a, b, c: Integer;
begin
  for a := 1 to 9 do
    for b := 1 to 9 do
      for c := 1 to 9 do
        Possible[a-1, b-1, c] := True;
end;
Später:

Delphi-Quellcode:
procedure TForm1.ResetPossible();
var a, b, c: Integer;
begin
  for a := 1 to 9 do
    for b := 1 to 9 do
      for c := 1 to 9 do
        Possible[a, b, c] := True;
end;
Das Problem war, dass der StringGrid von 0 bis 8 und nicht von 1 bis 9 die Spalten und Zeilen abzählt... Ich hatte eigentlich Possible als Array[0..8, 0..8, 1..9] initialisiert, aber das war mir zu unübersichtlich. Als ich auf [0..9, 0..9, 0..9] umgestiegen bin, habe ich wohl nicht bemerkt, dass 'Possible[a-1, b-1, c] := True;' in der Prozedur 'ResetPossible()' nicht mehr immer gültig ist.

Ich gestehe, dass das ein blöder Fehler ist und dass ich ihn eigentlich hätte entdecken können... Aber jetzt ist es repariert.



Zitat von xX0815Xx:
Das mit der Bereichsprüfung habe ich noch nicht gewusst
Ich auch nicht... Es hilft aber sehr. Danke, Muetze1
  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 06:48 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