Compilerproblem oder Denkfehler?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Compilerproblem oder Denkfehler?

Beitrag von KeyKon »

Nach langem mal wieder eine Frage, hab ich hier einen Denkfehler oder macht der Compiler da murks:

Getestet unter Win7 x64 mit dem 64bit Compiler 4.61

Code: Alles auswählen

;Fehler:

Structure qu
  a.q
  b.q
  
EndStructure

Debug SizeOf(qu)

NewList Quad.qu()

AddElement(Quad())

Quad()\a = 0
Quad()\b = 1

Debug Quad()\b
Quad()\a = Sin(0)*1
Debug Quad()\b



;Geht:

Structure in
  a.i
  b.i
  
EndStructure

Debug SizeOf(in)

NewList Integer.in()

AddElement(Integer())

Integer()\a = 0
Integer()\b = 1

Debug Integer()\b
Integer()\a = Sin(0)*1
Debug Integer()\b
Ausgabe:
16
1
0
16
1
1

Wiso verliert bei der oberen Liste b seinen Wert? Ich kann nur mutmaßen das hier aus irgendeinem Grund in nebenliegenden Speicher geschrieben wird, das ganze passiert nur wenn man ein Ergebnis von Sin,Cos,Tan mit irgendwas Multipliziert (zumindest nach meinen kurzen Tests).
Weist man a einen Wert aus einer Float oder Double Variable zu bleibt b unangetastet.

Der Fehler tritt bei der x86 Version nicht auf, weder bei Quad noch bei Integer (was da ja eh Long entspricht)

Tritt der Fehler bei euch auch auf? Hab ich was falsch gedacht oder ist es ein Problem mit dem Compiler?

LG KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Compilerproblem oder Denkfehler?

Beitrag von Josh »

Der gleiche Fehler hier. Du brauchst nicht mal eine List. Eine Struktur alleine genügt.

Code: Alles auswählen

;Fehler:

Structure qu
  a.q
  b.q
EndStructure

Define Quad.qu

Quad\a = 0
Quad\b = 1

Debug Quad\b
Quad\a = Sin(0)*1
Debug Quad\b


;Geht:

Structure in
  a.i
  b.i
EndStructure

Define Integer.in

Integer\a = 0
Integer\b = 1

Debug Integer\b
Integer\a = Sin(0)*1
Debug Integer\b
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Compilerproblem oder Denkfehler?

Beitrag von KeyKon »

Ah, daran die Liste auch noch wegzukürzen hatte ich gar nicht gedacht^^
Das Problem ist auf jedenfall sehr ärgerlich da ich die großen Wertebereiche brauche, aber das ganze auch auf x86 Rechnern laufen soll...


//EDIT:

Hab eben nochmal drüber nachgedacht, das Problem lässt sich mit einer expliziten Konvertierung umschiffen:

Code: Alles auswählen

Quad\a = IntQ(Sin(0)*1)
Dennoch sollte es natürlich auch ohne explizite Konvertierung keine Probleme (vor allem in anliegenden Speicherbereichen) kommen...
(\/) (°,,,°) (\/)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Compilerproblem oder Denkfehler?

Beitrag von STARGÅTE »

Sieht ein bisschen nach diesem Fehler aus:
[PB-4.60-64Bit] integer in structure vs. float
Hat mich auch viele Stunden gekostet eh ich wusste wo der Fehler war.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten