fehler bei strukturen?

Für allgemeine Fragen zur Programmierung mit PureBasic.
xaoax
Beiträge: 2
Registriert: 15.09.2004 09:30

fehler bei strukturen?

Beitrag 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.
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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 :)
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag 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:
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
coldarchon
Beiträge: 26
Registriert: 08.09.2004 09:33
Kontaktdaten:

Beitrag 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".
Dreamora
Beiträge: 21
Registriert: 10.09.2004 10:44

Beitrag 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 ...
coldarchon
Beiträge: 26
Registriert: 08.09.2004 09:33
Kontaktdaten:

Beitrag 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.
Dreamora
Beiträge: 21
Registriert: 10.09.2004 10:44

Beitrag 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 ...
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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...
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
xaoax
Beiträge: 2
Registriert: 15.09.2004 09:30

Beitrag 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.
Antworten