AGB  ·  Datenschutz  ·  Impressum  







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

Access violation mit free???

Ein Thema von tn249 · begonnen am 13. Dez 2004 · letzter Beitrag vom 14. Dez 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#1

Access violation mit free???

  Alt 13. Dez 2004, 21:33
Hi,

hier das wichtigeste aus meinem unit;
Code:
var
  mainForm: TmainForm;
  myfile: TFileStream;

implementation      

{$R *.dfm}

procedure TmainForm.Button1Click(Sender: TObject);
begin
  if (OpenDialog1.Execute) then
    begin
      try
        myfile := TFileStream.Create(OpenDialog1.FileName, fmOpenRead and fmShareDenyWrite);
      except
        myfile.Free;
      end;
    end;
end;

procedure TmainForm.Button2Click(Sender: TObject);
begin
  myfile.Free;
end;
wenn der zweite button gedrückt wird, bevor eine datei geladen wird passiert kein fehler.

wenn ich eine datei lade, sie dann schließe und hinterher nochmal den 2. button drücke bekomme ich eine access violation

ich frage mich warum, da ich in der hilfe folgendes gefunden habe;
Zitat:
Destroys an object and frees its associated memory, if necessary.

procedure Free;

Description

Use Free to destroy an object. Free automatically calls the destructor if the object reference is not nil. Any object instantiated at runtime that does not have an owner should be destroyed by a call to Free so that it can be properly disposed of and its memory released. Unlike Destroy, Free is successful even if the object is nil; so if the object was never initialized, Free won’t result in an error. [...]
kann mir das jemand erklären
würde mich sehr um hilfe freuen

MfG
tn249

PS: kann man vorher irgendwie überprüfen, ob die instanz schon freigegeben wurde?
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:39
wenn du einfach nur Free aufrufst wird das Object zwar frei gegeben aber der Objectzeiger nicht auf nil gesetzt. Wenn du jetzt erneug free aufrufst kracht es. Wenn du den Objeczeiger nach dem Free auf nil setzt würde das nicht passieren. Oder du rufst anstelle von "Free" gleich "FreeAndNil" auf
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:40
Zitat von tn249:
wenn ich eine datei lade, sie dann schließe und hinterher nochmal den 2. button drücke bekomme ich eine access violation
Wo schließt du die Datei? Der Exceptblock wird nur im Fehlerfall ausgeführt. Ersetzt das except durch finally. Und gib das mal mit Delphi-Referenz durchsuchenFreeAndNil frei, dann kannst du auchmit Assign gucken, ob es noch eine Instanz gibt.

Und warum eine globale Variable?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DennyC

Registriert seit: 27. Jan 2003
Ort: Berlin
47 Beiträge
 
Delphi 7 Professional
 
#4

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:49
Zitat von tn249:
wenn ich eine datei lade, sie dann schließe und hinterher nochmal den 2. button drücke bekomme ich eine access violation
Was meinst Du mit "sie dann schlie0e"?

Denny
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:50
Zitat von Luckie:
Zitat von tn249:
wenn ich eine datei lade, sie dann schließe und hinterher nochmal den 2. button drücke bekomme ich eine access violation
Wo schließt du die Datei? Der Exceptblock wird nur im Fehlerfall ausgeführt.
der except is ja nur für den fehler da, das was ich oben als schließen bezeichnet hatte, meinte ich mit auf den 2. button drücken

das freeandnil werde ich mal ausprobieren

globale variable: wie hättest du es denn gelöst von den beiden procedures auf die datei zuzugreifen?


vielen dank für eure hilfe

MfG
tn249

edit:
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:51
anstelle von Globalen Variablen könntest du es einfach in den Private-Teil der Klasse schreiben (also direkt unter "private"
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:55
juhui es funktioniert

Code:
myfile.Free;
myfile := nil;
bloß FreeAndNil kennt er nicht und ich kann nicht nachschauen warum, weil meine DH an der stelle im Ar*** ist

MfG
tn249
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von tn249
tn249

Registriert seit: 18. Jan 2004
Ort: München
164 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:56
Zitat von SirThornberry:
anstelle von Globalen Variablen könntest du es einfach in den Private-Teil der Klasse schreiben (also direkt unter "private"
gute idee, thx
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:57
FreeAndNil macht nix anderes als was du auch gemacht hast. Also erst Free aufrufen und dann das ganze auf "nil" setzen
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sanchez
Sanchez

Registriert seit: 24. Apr 2003
Ort: Neumarkt Stmk
892 Beiträge
 
Delphi XE6 Enterprise
 
#10

Re: Access violation mit free???

  Alt 13. Dez 2004, 21:59
Hallo,
FreeAndNil befindet sich übrigens in der Unit sysutils. Normalerweise solltest du die schon automatisch in den uses haben.
Aber es macht sowieso nicht merh als zuerst Free und danach nil zuweisen.

grüße, daniel
Daniel
Testen ist feige!
  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 22:22 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