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 :freak:

..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
:lol:

hät ich mir die mühe ja doch sparen können ^_^
Aber Bugs solltest du schon im Bug-Forum posten :mrgreen:

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.