AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi EAccessViolation bei privaten Variablen? Ratlos! :(

EAccessViolation bei privaten Variablen? Ratlos! :(

Ein Thema von sonbeta2 · begonnen am 5. Apr 2015 · letzter Beitrag vom 6. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
sonbeta2

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

EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16: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
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:20
Spiel.Create(AnzKandidat, Gewinnlimit); So habt ihr das bestimmt nicht gelernt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
ringli

Registriert seit: 7. Okt 2004
509 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:22
Du greifst vermutlich auf einen Bereich deines Arrays Speicher zu das nicht existent ist. Wie hoch ist denn pAnzahl?
  Mit Zitat antworten Zitat
sonbeta2

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

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:32
@ringli:
pAnzahl ist maximal 3..
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#5

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:39
Schau Dir nocheinmal die Zeile an, welche Luckie beriets moniert hatte.

Spiel.Create(AnzKandidat, Gewinnlimit); So habt ihr das bestimmt nicht gelernt.
Hier findest Du den Fehler.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
sonbeta2

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

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:48
Okay nun läuft das Programm so fehlerfrei.
Delphi-Quellcode:
 TSpiel.Create(AnzKandidat, Gewinnlimit);
//Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit);
//LbAusgabe.Caption := Spiel.Ausgabe;
Jedoch bekomme ich bei "Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit)" immer noch einen EAccessViolation Fehler.. Direkt in der ersten Zeile:

Delphi-Quellcode:
PROCEDURE TSpiel.Schnelldurchlauf(pKandidat, pPunkte:Integer);
VAR Zaehler, Nummer: Integer; AktKandidat: TKandidat;
BEGIN WHILE NOT Ende DO

Geändert von sonbeta2 ( 5. Apr 2015 um 16:50 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#7

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:54
Deine Variable "Spiel" ist nicht initialisiert.

Schau Dir nochmals die Zeile aus Post #2 und #5 an.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:55
Delphi-Quellcode:
TSpiel.Create(AnzKandidat, Gewinnlimit);
//Spiel.Schnelldurchlauf(AnzKandidat, Gewinnlimit);
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#9

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 16:56
Spiel := TSpiel.Create(AnzKandidat, Gewinnlimit); Bei
Zitat:
Speicher[Zaehler] := TKandidat.Create(Zaehler);
machst Du es ja auch richtig, wieso nicht hier?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
sonbeta2

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

AW: EAccessViolation bei privaten Variablen? Ratlos! :(

  Alt 5. Apr 2015, 17:03
Problem gelöst. Dankeschön an alle! Vor lauter Bäume sieht man manchmal den Wald nicht.

MfG
  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 22:16 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