AGB  ·  Datenschutz  ·  Impressum  







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

Verständnisfrage Objektfreigabe

Ein Thema von WIng2005 · begonnen am 10. Jun 2009 · letzter Beitrag vom 10. Jun 2009
Antwort Antwort
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#1

Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 09:19
Hallo Gemeinde,

ich habe ein Problem mit folgendem Code (grob gekürzt):

Delphi-Quellcode:
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var geraet:TGeraet;
begin
try
  if (key=vk_return) or (key=vk_tab) then Begin
  try
    geraet:=Tgeraet.create(edit.Text);
  except
    //mach was
    exit;
  end;
//mach was
end;//if key
finally
freeandnil(geraet); //<- Zugriffsverletzung
end;
end;
Deklariere ich "geraet" global funktioniert es.

Delphi-Quellcode:

unit test;

interface

uses
  //

type
  TForm1 = class(TForm)
    //
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation
uses //
{$R *.dfm}

var geraet:TGeraet; //<- So funktioniert es


procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
Begin
//
end;
Hat irgendwer ne Idee, warum ich das lokal deklarierte geraet nicht freigeben kann?
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 09:22
Wenn die If-Abfrage false liefert, wird das Objekt gar nicht erst erzeugt. Besser wäre es IMHO so:
Delphi-Quellcode:
procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var geraet:TGeraet;
begin
  if (key=vk_return) or (key=vk_tab) then Begin
  try
    geraet:=Tgeraet.create(edit.Text);
    try
      //machwas mit geraet
    finally
      freeandnil(geraet);
    end;
  except
    //mach was
    exit;
  end;
  //mach was
  end;//if key
end;
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
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 09:25
Zitat von DeddyH:
Wenn die If-Abfrage false liefert, wird das Objekt gar nicht erst erzeugt.
Und das Problem selbst wegen der AV kommt aber eigentlich eher daher, dass es eine lokale Variable ist und diese nicht intialisiert wird und dadurch ist die sehr sehr gross, dass die Variable nicht gerade nil ist.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 09:26
Stimmt, das vergaß ich noch zu erwähnen.
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
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#5

Re: Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 09:37
Mmmh, ich ging davon aus, dass freeandnil prüft, ob es überhaupt etwas zum freigeben gibt und in dem Fall, dass die If-Abfrage false liefert eben nichts freigegeben wird.
MFG
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 10:02
Ja, aber das setzt natürlich voraus, dass das Objekt mit nil initialisiert wird, was bei lokalen Variablen nicht der Fall ist (siehe Muetzes Post).
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
WIng2005

Registriert seit: 20. Mär 2006
Ort: Thüringen
388 Beiträge
 
Delphi XE Starter
 
#7

Re: Verständnisfrage Objektfreigabe

  Alt 10. Jun 2009, 10:13
Alles klar, das hilft mir weiter. Habt vielen Dank!!!
MFG
Steffen
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:21 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