Seite 1 von 1

Typecastingproblem von Quad bei statischen Arrays (x86)

Verfasst: 22.09.2010 15:06
von cxAlex
Ich schätze mal das das hier ein TypeCasting Problem vorliegt:

Code: Alles auswählen

Structure TestHolder
  tStatic.a[32]  
EndStructure

Macro NewHolder()
  AllocateMemory(SizeOf(TestHolder))  
EndMacro



Procedure GetHolder1(*Holder.TestHolder, Index.q)
  Protected Level.l = Index%33
  Debug "Level: "+Str(Level)
  ProcedureReturn *Holder\tStatic[Level]
EndProcedure

Procedure GetHolder2(*Holder.TestHolder, Index.i)
  Debug "Level: "+Str(Index%33)
  ProcedureReturn *Holder\tStatic[Index%33]
EndProcedure

Procedure GetHolder3(*Holder.TestHolder, Index.q)
  Debug "Level: "+Str(Index%33)
  ProcedureReturn *Holder\tStatic[Index%33] ; <- Hier passier der Fehler
EndProcedure

tH = NewHolder()

Debug GetHolder1(tH, 2)
Debug GetHolder2(tH, 2)
Debug GetHolder3(tH, 2)
Wenn das Modulo nicht über eine Long - Variable zwischengespeichert wird kommt ein "Index des Struktur-Arrays außerhalb des zulässigen Bereichs." - Fehler. Der Index ist korrekterweise aber 2, also innerhalb des Bereichs. Der Fehler tritt nur unter x86 auf.

Gruß, Alex

Re: Typecastingproblem von Quad bei statischen Arrays (x86)

Verfasst: 22.09.2010 15:18
von STARGÅTE
Bug kann ich bestätigen.

Unabhängig davon, frage ich mich aber wieso du Index % 32 benutzt.

Statische Arrays welche als Name[Fields] definiert werden haben genau 'Fields' Felder, also von 0,1,...,Fields-1 !!

*Holder\tStatic[32] gibt es also nicht !

Es wäre also logischer wenn du Index % 32 benutzt ... um immer im Intervall [0,31] zu bleiben.

PS: Dim Name(Fields) hätte 'Fields+1' Felder und würde von 0 bis Fields gehen !

Edit:

Alles klar, wollte trotzdem nur mal drauf hinweisen :wink:

Re: Typecastingproblem von Quad bei statischen Arrays (x86)

Verfasst: 22.09.2010 15:22
von cxAlex
Das Modulo war nur ein Beispiel, ich hab einfach schnell einen Democode stricken wollen der den Bug aufzeigt. Das 33 ist bedeutungslos.
In der Form verwende ich den Code gar nicht.

Gruß, Alex