ich bin jetzt schon den zweiten Tag an einem sehr hartnäckigen Problem. Mir sind zuerst fast die Augen rausgefallen: Ich habe mich gewundert, dass mein Programm in eine Endlosschleife läuft. Debugging zeigt, dass eine Liste mit 2 Elementen nach ForEach wieder vorn anfängt. Im Debugger sehe ich:
aktuelles Element 0, 1, 0, 1 usw.
Ebenso Endlosschleife bei
Code: Alles auswählen
While NextElement
;...
Wend
Code: Alles auswählen
Protected l_var1.s, l_
Ich habe nun vergeblich versucht, ein Minitestprogramm zu erstellen. Prinzipiell ist die Situation die:
Code: Alles auswählen
Structure st_s1
s1.s
i1.l
EndStructure
; Definition der globalen Liste
Global NewList li_l1.st_s1()
Structure st_s2
s2.s
i2.l
EndStructure
Global VariableY.st2
Define.Byte
; ...
; Zufügen von Elementen zu li_l1()...
Procedure ProcA()
;/ -----------------------------------------------------------------------------
;/ ...
;/ -----------------------------------------------------------------------------
Protected l_var1.s, l_ ; Mache ich dieses l_ weg, ist alles ok!
; ...
EndProcedure
; in einer Procedure Durchlauf durch die Liste, und er läuft endlos durch.
; While NextElement erkennt nicht, dass die Liste zu Ende ist
; ForEach ebenfalls nicht.
Jetzt habe ich im Debugger mal geschaut, was in ProcA() in Variable l_ steht. Erst einmal sehe ich: Sie hat eine Struktur, die ich für eine andere Variable verwende (st2). Da steht auch in den Stringvariablen was drin!
Vielleicht noch wichtig: Der Fehler kommt nur in einer Liste vor (nicht bei allen Listen) und nur, wenn diese mehr als 1 Element hat. Es ist mir ein Rätzel. Ich habe leider keine Ahnung, wie ich den Fall besser beschreiben soll. Eine Zerpflückung des Programms kommt nicht in Frage. Evtl. wäre ein Debugging per YouTube aufschlussreich.
Ich lösche die Variable l_ und komme weiter. Evtl. hilft meine Beschreibung...
