Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe beim Beheben einer Access Violation (https://www.delphipraxis.net/126626-hilfe-beim-beheben-einer-access-violation.html)

Romi 30. Dez 2008 00:46

Re: Hilfe beim Beheben einer Access Violation
 
Zitat:

Zitat von rollstuhlfahrer
keine Ahnung, ob das weiterhilft, aber nutze mal zum Zerstören FreeAndNil.

Wer oder was ist denn FreeAndNil? ;)

Zitat:

Zitat von rollstuhlfahrer
Schnelle boolische Auswertung mit {$B+} anschalten.

Was macht das genau? Ist das das selbe wie in den Projektoptionen "Vollständige Boolesche Auswertung"? Das stand auf False.

hoika 30. Dez 2008 07:22

Re: Hilfe beim Beheben einer Access Violation
 
Hallo,

nein, damit erreicht du das Gegenteil.
Zur Frage, was das ist,
gibt es doch die schöne Hilfe ?

Akademisches Bsp:

Delphi-Quellcode:
function Foo: Integer;
begin
  Result:= 1;
end;

{$B+}
a:= 0;
if (a=0) or (b=Foo)
Es wird nur der 1. Teil ausgewertet,
da das Endergebnis ja schon True ist

Foo als Funktion wird überhaupt nicht angesprungen.

Das kann gut sein, oder nicht,
je nachdem, ob der Programmierer in Foo etwas macht,
was immer gemacht werden soll, oder nicht.

Ist immer lustig, solche Sachen zu suchen und zu finden.


Heiko

Romi 30. Dez 2008 12:53

Re: Hilfe beim Beheben einer Access Violation
 
Zitat:

Zitat von hoika
Zur Frage, was das ist,
gibt es doch die schöne Hilfe ?

Oh ja, die kann ich leider nicht öffnen. Der Microsoft Document Explorer sei nicht installiert, ist er aber.

Zitat:

Zitat von hoika
Ist immer lustig, solche Sachen zu suchen und zu finden.

Ich teste gerade noch, aber ich glaube das wars.

hoika 30. Dez 2008 13:59

Re: Hilfe beim Beheben einer Access Violation
 
Hallo,

zu deinem Hilfe-Problem.

1


Heiko

rollstuhlfahrer 30. Dez 2008 14:10

Re: Hilfe beim Beheben einer Access Violation
 
HI

FreeAndNil ist eine Delphi-Prozedur aus der Sysutils-Unit.
Der interne Aufbau sieht wie folgt aus:
Delphi-Quellcode:
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end;
Zuerst wird Temp das Objekt (die Komponente oder sonst was) zugewiesen. Dann wird der VAR-Parameter auf nil gesetzt. -> Fazit: er ist eindeutig nil. Danach wrd noch das Objekt aus dem Speicher geräumt. Achtung: Da .Free von TObject aufgerufen wird, darf diese Prozedur nirgendwo überschrieben werden, was bei manchen Programmierern manchmal vorkommt. Zerstört wird in .Destroy.

Bernhard

mkinzler 30. Dez 2008 14:12

Re: Hilfe beim Beheben einer Access Violation
 
Zitat:

Da .Free von TObject aufgerufen wird, darf diese Prozedur nirgendwo überschrieben werden,
Überschrieben werden schon, man muss in diesem Fall nur sicherstellen, das die geerbte Variante am Schluss aufgerufen wird

Romi 30. Dez 2008 14:25

Re: Hilfe beim Beheben einer Access Violation
 
Naja, {B+} hat doch nicht geholfen. Schade, ich hatte 9 Spiele am Stück, das sah so gut aus :|

Zitat:

Zuerst wird Temp das Objekt (die Komponente oder sonst was) zugewiesen. Dann wird der VAR-Parameter auf nil gesetzt. -> Fazit: er ist eindeutig nil. Danach wrd noch das Objekt aus dem Speicher geräumt. Achtung: Da .Free von TObject aufgerufen wird, darf diese Prozedur nirgendwo überschrieben werden, was bei manchen Programmierern manchmal vorkommt. Zerstört wird in .Destroy.
Das klingt interessant. Du sagtest, es liegt in der SysUtils Unit, wie erweitere ich denn meine Klasse um diese Procedure?

Romi 2. Jan 2009 20:00

Re: Hilfe beim Beheben einer Access Violation
 
Zitat:

Zitat von Romi
Das klingt interessant. Du sagtest, es liegt in der SysUtils Unit, wie erweitere ich denn meine Klasse um diese Procedure?

*bump*
Vllt. noch jemand eine Ahnung?

mkinzler 2. Jan 2009 20:06

Re: Hilfe beim Beheben einer Access Violation
 
Nein Free ist eine Methode der Basis-Klasse TObject, von welcher alle Klassen direkt oder indirekt abgeleitet sind. Überschreibt man diese Methode sollte man am ende die geerbete Aufrufen:

Delphi-Quellcode:
procedure TMeineKlasse.Free();
begin
    ...
    inherited;
end;

Romi 2. Jan 2009 20:11

Re: Hilfe beim Beheben einer Access Violation
 
Zitat:

Zitat von mkinzler
Nein Free ist eine Methode der Basis-Klasse TObject, von welcher alle Klassen direkt oder indirekt abgeleitet sind. Überschreibt man diese Methode sollte man am ende die geerbete Aufrufen:

Delphi-Quellcode:
procedure TMeineKlasse.Free();
begin
    ...
    inherited;
end;

Danke für deine Antwort, aber es ging um FreeAndNil ;)

EDIT: Habs schon gefunden. Hatte mich bloß verlesen. Das löst das Problem mit der Acces Violation! Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:37 Uhr.
Seite 2 von 3     12 3      

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