Delete Each

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Eingeproggt

Betreff: Delete Each

BeitragSo, Okt 07, 2012 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Servus,

ich bin ein wenig verwundert und wollte mal fragen ob ich was übersehe oder ob hier Dinge abgehen die ich nicht verstehe...
In meinem Code findet sich folgendes:

BlitzBasic: [AUSKLAPPEN]
Type player
;...
Field node.PathNode
End Type
;....
Delete Each PathNode
For pl=Each player
If pl\node<>Null Then DebugLog "HEY"
Next

Natürlich schön in mein Programm verstrickt so dass es mir selbst noch nicht gelungen ist, den Fehler zu "isolieren". Die Delete-Each und For-Each Zeilen stehen jedenfalls direkt hintereinander ohne dass irgendwas mit PathNode dazwischen passiert!
Und jetzt zu meiner "Frage": Ich bekomme unter Umständen (nicht immer) im Debuglog ein "HEY". Das kann es doch eigentlich gar nicht geben? Shocked
Ich kann selbstverständlich das Problem beheben indem ich in die For-Each-Schleife nochmal ein Delete reinsetze aber so rein vom Prinzip her dürfte es doch keine PathNodes mehr geben nachdem Delete Each PathNode ausgeführt wurde?

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Xeres

Moderator

BeitragSo, Okt 07, 2012 20:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Ahnung wie der GC dabei arbeitet, aber es kann natürlich sein, dass er nicht augenblicklich reagiert.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Lobby

BeitragSo, Okt 07, 2012 23:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres, BlitzBasic und GC? Shocked

Das Verhalten ist in der Tat höchst sonderbar, Eingeproggt.

Der Eisvogel

BeitragMo, Okt 08, 2012 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Eingeproggt,

für mich ist das Verhalten normal. Du löschst zwar jegliche Instanzen von PathNode und der Speicher wird vermutlich auch freigegeben. Aber die Referenzen bleiben erhalten.

BlitzBasic: [AUSKLAPPEN]
If pl\node<>Null Then DebugLog "HEY"

Das prüft nur, ob etwas in der Variable steht, jedoch nicht, ob es valide ist.

MfG
Der Eisvogel
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Xeres

Moderator

BeitragMo, Okt 08, 2012 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein Eisvogel, so arbeitet BB nicht.
"Delete each" löscht alle Instanzen des entsprechenden types. Alle Variablen die die Instanzen Referenzieren, zeigen danach auf NULL.

Keine sehr anschaulichen Variablenbezeichnungen, aber prinzipiell:

BlitzBasic: [AUSKLAPPEN]
Type TN
Field n%
End Type

Type TN2
Field n1.TN, n2.TN
End Type

Local n2.TN2 = New TN2
n2\n1 = New TN
n2\n1\n = 42
n2\n2 = New TN
n2\n2\n = 1337

Print(Str(n2))
Delete Each TN
Print(Str(n2))

WaitKey()
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Chester

BeitragMo, Okt 08, 2012 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Keine Ahnung wie der GC dabei arbeitet, aber es kann natürlich sein, dass er nicht augenblicklich reagiert.


BB arbeitet prozedural, der nächste Befehl wird also erst ausgeführt, wenn Deleate Each vollständig abgeschlossen ist. Kann man ganz einfach ausprobieren, indem man die Zeitabhängigkeit von der Typanzahl misst. Insofern bist du hier wahrscheinlich wirklich auf was gestoßen, was nicht passieren darf oder hast sonst irgendwo was drin, was hier fehlt. Denn ich habe verschiedene Sachen ausprobiert, aber konnte deinen Fehler nicht reproduzieren.

Hast du mal Debug On/Off ausprobiert (also mir Runtimeerror oder irgendwas lustigem)?

Eingeproggt

BeitragDi, Okt 09, 2012 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@Chester:
Guter Ansatz zu testen ob es eventuell am Debugmode liegt, aber hab das Problem einfach (unelegant) umgangen und es nicht näher erforscht.
Wenn es mich sehr reizt oder jemand von euch sehr viel Zeit damit verbringen will... Der Code in dem das Problem ursprünglich auftrat wird im Rahmen des BCC ja bald veröffentlicht von mir Wink Und die Stelle an der das problem auftrat is sogar noch markiert... aber keine Ahnung ob es noch immer auftritt.

mfG, Christoph
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group