Einzelnen Beitrag anzeigen

sonbeta2

Registriert seit: 5. Apr 2015
4 Beiträge
 
#1

EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 15:10
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:
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 *)
Der Fehler tritt in der Unit TSpiel auf mit der Meldung:
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:
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;
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.

MfG
  Mit Zitat antworten Zitat