Seite 1 von 1

fehler bei strukturen?

Verfasst: 15.09.2004 09:45
von xaoax
Servus!

Ich hab etwas mit den Strukturen, Pointern und statischen Arrays rumgespielt und bin jetzt an einem Punkt, an dem das bei PB nicht mehr funktioniert. Ich setzt das mal hier rein:

Code: Alles auswählen

 Structure a1
eins.s
EndStructure

Structure a2
zwei.a1
EndStructure


Structure b1
*pointer.a2[3]
EndStructure


test0.a2\zwei\eins = "apfel"
test1.a2\zwei\eins = "birne"
test2.a2\zwei\eins = "kiwie"

obst.b1\pointer[0] = @test0
obst.b1\pointer[1] = @test1
obst.b1\pointer[2] = @test2


Debug obst\pointer[0]\zwei\eins     
Debug obst\pointer[1]\zwei\eins
Debug obst\pointer[2]\zwei\eins

;das funktioniert soweit noch. wenn ich jetzt aber in das statische array eine variable einsetzte...


For vari = 0 To 2

  Debug obst\pointer[vari]\zwei\eins
  
  Debug @obst\pointer[vari]\zwei\eins
  Debug obst\pointer[vari]
  

Next    
;... verhält sich das ganze als würde die variable immer gleich null sein.
;der Pointer liest zwar die richtige adresse aus; es werden aber immer nur die unterstrukturen von \pointer[0]\ ausgelesen.
so. meine frage ist jetzt, ob ich da irgendwo einen fehler drin habe oder ob das schlicht und einfach nicht geht.

Verfasst: 15.09.2004 16:31
von Lars
Das sieht mir irgendwie nach einem Bug aus, aber vielleicht verwirrt mich
der Code auch so sehr, dass ich einen fehler nicht sehe :)

Verfasst: 16.09.2004 18:54
von Falko
Wenn ich das im Code sehe wiederholst du doch nur anstelle der Arrays
mit zahlen durch Variablen. Dann müßte das aber doch evt. so aussehen,
oder???

Code: Alles auswählen

For vari = 0 To 2 

  Debug obst\pointer[vari]\zwei\eins 
  Debug @obst\pointer[vari]\zwei\eins 
  Debug obst\pointer[vari]\zwei\eins   ; muß das nicht so aussehen??
  

Next 
Gruß Falko

Verfasst: 16.09.2004 19:14
von Lars
@Falko
Nein, das ist schon richtig, er will mit der 3. Debug Anzeige belegen, dass
der Pointer auf die Test-Variablen noch stimmen.

Andre? :wink:

Verfasst: 17.09.2004 11:05
von coldarchon
warum ist denn der Zeiger in b1 auch vom Typ a2? Bei mir funktioniert das nämlich gar nicht, ich bekomme in den Werten ohne Schleife immer nur "apfel".

Verfasst: 17.09.2004 13:14
von Dreamora
Genau das meint er doch
Dass der Pointer Array im dynamischen Fall nicht durchiteriert wird, während er im konstanten Fall fehlerfrei funktioniert ...

Verfasst: 17.09.2004 14:51
von coldarchon
coldarchon hat geschrieben:Bei mir funktioniert das nämlich gar nicht, ich bekomme in den Werten ohne Schleife immer nur "apfel".
Dreamora hat geschrieben:während er im konstanten Fall fehlerfrei funktioniert
bei einer fehlerfreien Ausgabe würde ich auch birne und kiwi(e) lesen können. Aber mit dieser Methode werden außer der Stelle 0 keine anderen belegt. Bei mir ist das Ganze andersrum. Da steht 4 mal Apfel und dann kommen die Zeigeradressen.

Verfasst: 17.09.2004 15:09
von Dreamora
Hmm, was hast du für eine PB Version?

Daran macht mich was anderes noch stutziger übrigens

wenn du den Pointer *obst.bl\pointer zuweisen würdest, dann spuckt er nicht mal im konstanten fall ne adresse aus ...

Verfasst: 19.09.2004 16:58
von Andre
Lars hat geschrieben:@Falko
Nein, das ist schon richtig, er will mit der 3. Debug Anzeige belegen, dass
der Pointer auf die Test-Variablen noch stimmen.

Andre? :wink:
Ich werde mal Fred dsbzgl. einschalten, damit er sich den Beispielcode mal ansieht...

Verfasst: 19.09.2004 17:46
von xaoax
so. hallo zusammen. sorry das ich solange hier nix mehr beigetragen hab.

Also ich habe die aktuelle online PB version 3.91.
Das Bsp ist vielleicht etwas verwirrend, aber die message ist scheinbar rübergekommen.

bis jetzt hab ich das problem provisorisch so umgangen:

Code: Alles auswählen

 For vari = 0 To 2
 
 *hilfspointer.a2 = obst\pointer[vari]      ;der hilfspointer übernimmt die adresse die im pointer gespeichert ist (die stimmt ja noch)
 
 Debug *hilfspointer\zwei\eins              ;und wird dann benutzt um die unterstrukturen abzugreifen....
  

Next   
@ coldarchon
warum ist denn der Zeiger in b1 auch vom Typ a2?
es war eigentlich gedacht, dass der zeiger von obst.b1 auf die strukturen und unterstrukturen von testX.a2 zugreifen kann. darum hat er die gleiche struktur, sonst könnte er das nicht.