AGB  ·  Datenschutz  ·  Impressum  







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

Warum AccessViolation?

Ein Thema von moin339 · begonnen am 8. Aug 2003 · letzter Beitrag vom 12. Aug 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#1

Warum AccessViolation?

  Alt 8. Aug 2003, 18:26
Moin!

Ich habe hier ein kleines testprogramm. Wenn ich zuerst auf Button1 und dannach auf Button2 klicke bekomme ich eine AccessViolation, obwohl die Variable eigentlich definiert ist. Wisst ihr wodran das liegt?

Delphi-Quellcode:
  TTest = class
  private
    TestString : string;
  public
    constructor create;
    procedure ShowString;
  end;

var
  Form1 : TForm1;
  test : TTest;

implementation

{$R *.dfm}

constructor TTest.create;
begin
  TestString := 'Hallo';

  while true do
  begin
    Application.ProcessMessages;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  test := TTest.create;
  test.free;
end;

procedure TTest.ShowString;
begin
  ShowMessage(TestString); // Exception: EAccessViolation
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  test.ShowString;
end;
ciao, moin399
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 18:28

Zitat:
test := TTest.create;
test.free;
was glaubst du, was ein free macht?


Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 18:32
Zitat:
while true do
begin
Application.ProcessMessages;
end;
was hat das denn so eine endlosschleife im constructor zu suchen ?

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#4

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 18:46
Würde das ganze funktionieren wenn die endlosschleife in einer anderen methode von TTest ist, also nicht im constructor? (habe hier grad kein Delphi)

moin339
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 19:20
Du kannst die Endlosschleife hinpacken wohin du willst. Aber was meinst du wie viel Instanzen deines Objektes noch existieren, wenn du nach Create gleich ein Free wieder aufrufst?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Marco Haffner
(Gast)

n/a Beiträge
 
#6

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 19:21
Also den Fehler hat jetzt sogar mein Cousin gefunden und der hat noch nie Programmiert.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  test := TTest.create;
  test.free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  test.ShowString;
end;
Das kann so nicht funktionieren. In Button1Click erzeugst Du die Variable Test, gibst sie aber auch gleich wieder frei.
Das heißt, wenn Du Button2 anklickst ist Test schon längst wieder freigegeben.
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#7

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 20:27
Schön, Schön. Bloß wenn ich die "test.free" Zeile lösche passiert das gleiche. Free wird ja auch nicht ausgeführt, da create nicht fertig werden kann (ist ja auch eine ENDLOS-Schleife)

Probiert den code doch bitte mal selber aus

ciao, moin339
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 20:29
Stimmt auch wieder. Aber in diesem Fall wird die Instanz deines Objektes nie erstellt.

Was soll der Blödsinn mit der Endlosschleife überhaupt im Konstruktor?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339

Registriert seit: 23. Sep 2002
Ort: Hamburg
136 Beiträge
 
#9

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 20:43
Zitat von Luckie:
Was soll der Blödsinn mit der Endlosschleife überhaupt im Konstruktor?
Ich schreibe eine GUI für ein consolen programm und starte im constructor einer klasse das programm und prüfe auf neue daten (das ganze in einer schleife, die erst verlassen wird wenn das consolen-programm beendet ist)

Zitat von Luckie:
Stimmt auch wieder. Aber in diesem Fall wird die Instanz deines Objektes nie erstellt.
Würde das ganze funktionieren wenn die endlosschleife in einer anderen methode von TTest ist, also nicht im constructor?

ciao, moin339
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#10

Re: Warum AccessViolation?

  Alt 8. Aug 2003, 20:55
irgendwie sehe ich keinen Sinn darin
Zitat:
(das ganze in einer schleife, die erst verlassen wird wenn das consolen-programm beendet ist)
wann wird denn deine endlosschleife verlassen? doch nie, oder? es gibt doch gar keine Abbruchgbedingung ...

außerdem, wenn du das application.processmessages so inder schleife drinläßt, wird dein CPU-Belastung auf 100% gehen. wenn schobn, dann setzt ein sleep mit rein

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  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:07 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