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=10) then 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:
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??
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!