Seite 1 von 1

Compilerproblem oder Denkfehler?

Verfasst: 20.08.2012 23:34
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

Re: Compilerproblem oder Denkfehler?

Verfasst: 21.08.2012 00:20
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

Re: Compilerproblem oder Denkfehler?

Verfasst: 21.08.2012 00:37
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...

Re: Compilerproblem oder Denkfehler?

Verfasst: 21.08.2012 01:19
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.