Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - if schleife Übersprungen??


neuling82 - Mi 30.07.03 09:41
Titel: if schleife Übersprungen??
Hey Leute, ich glaube meine Delphi spinnt (oder bin ich es...?! :shock: )
ich habe folgenden if abfrage:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
   if assigned(global_protokoll) then
   begin
     global_protokoll.add(text);

     if (status=10then
      begin
      global_protokoll.free;
      end;
   end;
end;


diese durchläuft des Programm ständig, da diese Procedure extern aufgerufen wird. wenn nun die Procedure aufgerufen wird und status 10 ist, wird global_protokoll.free ausgeführt. beim nächsten Aufruf der Procedure und der Abfrage


Delphi-Quelltext
1:
2:
3:
if assigned(global_protokoll) then
   begin
     global_protokoll.add(text);


ist assigned(global_protokoll) true obwohl ich es doch bei status 10 mit free freigegeben habe?!
dann Läuft der Compiler weiter UND !!überspringt!! mir einfach die if abfrage nach status 10??!! Wie geht das denn bitte??


teebee - Mi 30.07.03 09:53

Hast Du überprüft, ob Status tatsächlich 10 wird, bzw. global_protokoll wirklich zerstört wird?

Ciao, teebee


Motzi - Mi 30.07.03 09:59

Ein Objekt ist ein Pointer... mit:

Delphi-Quelltext
1:
global_protokoll.free                    

Gibst du das Objekt zwar frei, aber der Pointer auf das Objekt ist immer noch gespeichert - global_protokoll enthält also immer noch die Referenz auf das nun nicht mehr existierende Objekt! Lösung - die Objekt-Referenz manuell auf nil setzen oder FreeAndNil verwenden:

Delphi-Quelltext
1:
2:
global_protokoll.free;
global_protokoll := nil;


Delphi-Quelltext
1:
FreeAndNil(global_protokoll)                    


neuling82 - Mi 30.07.03 11:23

danke, aber warum springt er mir über die Abfrage


Delphi-Quelltext
1:
2:
3:
4:
id status = 10 then
begin
...
end;


und geht, egal ob true oder false sofort in .... rein??