Seite 1 von 2
Pb 4.30: SelectElement() Zeigt fehler
Verfasst: 18.12.2008 09:10
von In_Go
Hallo und Fröhliche Weihnachten!
Ist das Folgende ein Fehler?
Mit PB 4.20 scheints zu arbeiten..
Bei PB 430 zeift sich ein Fehler
Oder sollte ich was übersehen Haben ?!
Bei mir trat ein unerwarteter Fehler auf.....
Code: Alles auswählen
NewList men()
For n= 0 To 30
AddElement(men())
men()=n
Next n
SelectElement(men(),2)
DeleteElement(men())
erg= men()
PreviousElement(men())
DeleteElement(men())
momi1=0
momi2=0
If #PB_Compiler_Version = 420
axiom= CountList(men()) ;Haltepunkt sezen Hier
EndIf
If #PB_Compiler_Version = 430
axiom= ListIndex(men())
EndIf
Debug axiom
x=g
axiom1=ListIndex(men()) ; Haltepunkt setzen auch Hier
If axiom1 = -1
SelectElement(men(),1)
EndIf
axiom2= ListIndex(men())
mo = men() ; Wird Fehler unter PB 430
End
Vielen Dank für ein ansonste gute Arbeit!
In_Go
Verfasst: 18.12.2008 09:22
von #NULL
geht auch mit 420 nicht. du musst CompilerIf verwenden. außerdem meinst du vielleicht ListSize() und nicht ListIndex() (?)
da sind auch zwei variablen die du nicht verwendest ..ein wenig aussagekräftiges, eher wirres code-snipsel
..entschuldige, es compiliert doch unter 420 (jedenfalls mit ListIndex()). war mein eigener fehler. aber nicht mit ListSize(), was du wohl eher meinst, wenn du es wie CountList() verwendest.
Verfasst: 18.12.2008 09:44
von In_Go
Hallo Null!
Der Fehler trat bei mir in einem Programm von
ca. 10000 Verschiedenen befehlen auf.
Die Angaben für #PB_Compiler_Version fumktioniert arbeitet bei mir Korrekt. dh. er springt nur an die jeweiligen Stellen.
Versuche es mal mit Debugger an den entsprechenden Punkten, dann kannst du selbst Nachprüfen og es arbeitet!
Dies ist nur ein von mir erstelltes Beispiel, welches den von mir
erzeugten Fehler Zeigt (bei PB 4.30)
Dieser Fehler ist durchaus real, und getestet!
Vielen Dank!
In_Go
Verfasst: 18.12.2008 11:35
von Kiffi
wenn ich das jetzt richtig interpretiere, kann man den Code auf folgende
Zeilen kürzen:
Code: Alles auswählen
SelectElement(men(),2)
DeleteElement(men())
PreviousElement(men())
DeleteElement(men())
DeleteElement in der PB-Hilfe hat geschrieben:Entfernt das aktuelle Element aus der Liste. Nach dem Aufruf dieser Funktion
wird das vorherige Element (dasjenige vor dem gelöschten Element) neues
aktuelles Element. Wenn dieses Element nicht existiert (mit anderen Worten:
Sie haben das erste Element in der Liste gelöscht), dann gibt es kein
aktuelles Element mehr, da es sich vor dem ersten Element befindet, wie
nach einem ResetList().
Wenn meine Vermutung bei Dir nicht zutreffen sollte, dann bitte ich um
einen lauffähigen kurzen Code, anhand dessen wir das alle mal
nachvollziehen können.
Grüße ... Kiffi
Verfasst: 18.12.2008 16:11
von In_Go
Hallo Kiffi!
Leider war ich nicht mehr online
Du hast recht hier ist einiges Überflüssig ....
Die Elemente dienen auch nur der Fehlerbeschreibung
In PB 4.20 gibt es keine Fehlermeldung
Durch SelectElement(men(),1) sollte es zum Element 1 zeigen
Tuts auch unter PB 4.20 . . .
Hier gibts eine Fehlermeldung:
Code: Alles auswählen
NewList men() :For n= 0 To 30: AddElement(men()) :men()=n :Next n
; Die angabe von Kiffi
SelectElement(men(),2)
DeleteElement(men())
PreviousElement(men())
DeleteElement(men())
;das Ende der Angaben von Kiffi
axiom1= ListIndex(men()) ; axiom 1 wurde nur eingefügt zum Testen
If axiom1 = -1: SelectElement( men(),1) :axiom2=99:EndIf
; nun sollte unser element nach element 1 zeigen..
; zum Zeigen das Element 1 selectiert ist wird axiom2 nun 99
; und Müsste in dem nun folgenden Element kein Fehler zeihen
mo = men() ; obwohl Element auf 1 zeigt: Fehlermeldung unter PB 4.30
Hier sind nun alle "Überflüssigen" Elemente entfernt
Code: Alles auswählen
NewList men() :For n= 0 To 30: AddElement(men()) :men()=n :Next n
SelectElement(men(),2)
DeleteElement(men())
PreviousElement(men())
DeleteElement(men())
If ListIndex(men()) = -1: SelectElement( men(),1) :EndIf
mo = men()
Der Fehler wird auch hier gezeigt...
Ist es nun Übersichtlicher ?
Fröhliche Weihnachten!
In_Go
Verfasst: 18.12.2008 17:41
von PMV
nach ein bischen rumspielen muss ich In_Go bestätigen, nach ListIndex()
und genügend Elementen funktioniert SelectElement() nicht mehr.
http://www.purebasic.fr/english/viewtopic.php?p=271183
MFG PMV
Verfasst: 18.12.2008 17:43
von #NULL
Verfasst: 18.12.2008 18:03
von PMV
hät ich mir die mühe ja doch sparen können ^_^
Aber Bugs solltest du schon im Bug-Forum posten
MFG PMV
Verfasst: 18.12.2008 21:15
von In_Go
Fröhliche Weihnachten!
Durch einfügen von FirstElement(men()) vor SelectElement(men(),1)
kann der Fehler vermieden werden! die Zeile sieht dann so aus:
Code: Alles auswählen
If ListIndex(men())=-1 : FirstElement(men()) :SelectElement(men(),1):EndIf
Diese Zeile arbeitet jetzt korrekt!
Danke!
Gruss In_Go
Verfasst: 19.12.2008 17:13
von Andesdaf
> Fröhliche Weihnachten!
Ebenfalls.