![]() |
EAccessViolation bei privaten Variablen? Ratlos! :(
Guten Tag liebe Community!
Ich muss für meine Facharbeit eine Simulation schreiben, die das Thema "Frauenversteher" umfasst. Zunächst habe ich 3 Units. Das Formular, das Spiel, den Kandidaten. Programm: Delphi 5.
Delphi-Quellcode:
TYPE TKandidat = Class
PRIVATE Nummer: Integer; Punkte: Integer; PUBLIC CONSTRUCTOR Create(pNummer: Integer); FUNCTION GibNummer: Integer; FUNCTION GibPunkte: Integer; PROCEDURE Aktualisierung(pPunkte: Integer); END; (* TKandidat *)
Delphi-Quellcode:
Der Fehler tritt in der Unit TSpiel auf mit der Meldung:
TYPE TSpiel = Class
PRIVATE Speicher: ARRAY[1..3] OF TKandidat; AnzahlKandidaten: Integer; Gewinnlimit: Integer; Frage, Antwort, Ende: Boolean; Runde: Integer; PUBLIC CONSTRUCTOR Create(pAnzahl, pPunkte: Integer); PROCEDURE Schnelldurchlauf(pKandidat, pPunkte: Integer); FUNCTION Ausgabe: String; FUNCTION Wahrscheinlichkeit(pAnzahl, pPunkte: Integer): String; END; (* TSpiel *) CONSTRUCTOR TSpiel.Create(pAnzahl, pPunkte: Integer); VAR Zaehler: Integer; BEGIN Runde := 0; Ende := False; Gewinnlimit := pPunkte; AnzahlKandidaten := pAnzahl; //Frage := False; FOR Zaehler := 1 TO pAnzahl DO Speicher[Zaehler] := TKandidat.Create(Zaehler); END; (* CSTR *) Im Projekt ... ist eine Exception der EAccessViolation aufgetreten. Meldung: 'Zugriffsverletzung bei Adresse: 00441AAB in Modul ... Schreiben von Adresse 0000001C'. ... So wird der Konstruktor etc aufgerufen:
Delphi-Quellcode:
Ich habe mir alles schon hunderte Male angeguckt und auch gegooglet, aber ich werde seit Stunden nicht fündig! Ich hoffe ihr könnt mir etwas behilflich sein.
PROCEDURE TFrauenversteher.BtStartClick(Sender: TObject);
VAR AnzKandidat, Gewinnlimit: Integer; BEGIN AnzKandidat := StrToInt(EdKandidaten.Text); Gewinnlimit := StrToInt(EdPunkte.Text); IF (AnzKandidat < 1) OR (Gewinnlimit < 1) THEN LbAusgabe.Caption := 'Bitte geben Sie Daten über 0 an.' ELSE BEGIN Spiel.Create(AnzKandidat, Gewinnlimit); Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit); // LbAusgabe.Caption := Spiel.Ausgabe END; (* ELSE *) END; MfG |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Delphi-Quellcode:
So habt ihr das bestimmt nicht gelernt.
Spiel.Create(AnzKandidat, Gewinnlimit);
|
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Du greifst vermutlich auf einen Bereich deines Arrays Speicher zu das nicht existent ist. Wie hoch ist denn pAnzahl?
|
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
@ringli:
pAnzahl ist maximal 3.. |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Schau Dir nocheinmal die Zeile an, welche Luckie beriets moniert hatte.
Zitat:
|
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Okay nun läuft das Programm so fehlerfrei.
Delphi-Quellcode:
Jedoch bekomme ich bei "Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit)" immer noch einen EAccessViolation Fehler.. Direkt in der ersten Zeile:
TSpiel.Create(AnzKandidat, Gewinnlimit);
//Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit); //LbAusgabe.Caption := Spiel.Ausgabe;
Delphi-Quellcode:
PROCEDURE TSpiel.Schnelldurchlauf(pKandidat, pPunkte:Integer);
VAR Zaehler, Nummer: Integer; AktKandidat: TKandidat; BEGIN WHILE NOT Ende DO |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Deine Variable "Spiel" ist nicht initialisiert.
Schau Dir nochmals die Zeile aus Post #2 und #5 an. |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Delphi-Quellcode:
Möööööp. Auch so habt ihr es nicht gelernt. Und bevor du weiter rumprobierst, werfe doch bitte mal einen Blick in ein OOP Tutorial oder Buch dazu.
TSpiel.Create(AnzKandidat, Gewinnlimit);
//Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit); |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Delphi-Quellcode:
Bei
Spiel := TSpiel.Create(AnzKandidat, Gewinnlimit);
Zitat:
|
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Problem gelöst. Dankeschön an alle! Vor lauter Bäume sieht man manchmal den Wald nicht. :|
MfG |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Zitat:
Da der TE es ja an anderer Stelle bereits einmal richtig gemacht hatte, war ich mir eigentlich sicher, dass er seinen Fehler selbst findet, wenn man ihm die entsprechende Stelle nur oft genug vor Augen führt. Edit: Die DP-Inlinehilfe für > Oh < ist ja auch lustig. |
AW: EAccessViolation bei privaten Variablen? Ratlos! :(
Zitat:
Dermaßen kleine Adressen in Zugriffsverletzungen gibt es normalerweise nur bei Nullpointern (Null + Offset) und/oder uninitialisierten Zeigern :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04: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-2025 by Thomas Breitkreuz