Logikfehler in Arraysystem?
Verfasst: 08.08.2005 14:08
Hi!
Da das Arraysystem von PureBasic jediglich Globale Arrays kennt, musste ich mir selber ein System erstellen, das zumindest so etwas ähnliches wie Lokale Arrays erzeugt:
Leider stürtzt das Programm manchmal mitten in new_feld() oder get() ab obwohl die Funktionen vorher 100 mal ohne Fehler durchlaufen wurden.
Der Arbeitsspeicher ist nicht voll, und get hat eigentlich einen Schutz, damit man nicht über die Arraygrenzen hinaus greift.
Ich kann die Abstürtze leider nicht direkt Reproduzieren.
Seht ihr irgendwelche Logikfehler?
Danke!
Da das Arraysystem von PureBasic jediglich Globale Arrays kennt, musste ich mir selber ein System erstellen, das zumindest so etwas ähnliches wie Lokale Arrays erzeugt:
Code: Alles auswählen
#xsize=10
#ysize=7
Procedure get(adresse.l,x.l,y.l)
If x>=1 And x<= #xsize And y>=1 And y<= #ysize
x-1
y-1
position=x*(#xsize)+y
ProcedureReturn PeekL( adresse + position*4 );Manchmal stürtzt es in dieser Zeile ab
Else
PrintN("fehler bei aufruf von get x="+Str(x)+" y="+Str(y))
EndIf
EndProcedure
Procedure set(adresse.l,x.l,y.l,wert.l)
If x>=1 And x<= #xsize And y>=1 And y<= #ysize
x-1
y-1
position=x*(#xsize)+y
PokeL( adresse + position*4 ,wert)
Else
PrintN("fehler bei aufruf von set")
EndIf
EndProcedure
Procedure new_feld()
ProcedureReturn AllocateMemory((#xsize+1)*(#ysize+1)*4) ;manchmal stürtzt es in der zeile ab
EndProcedure
Procedure del_feld(adresse)
ProcedureReturn FreeMemory(adresse)
EndProcedure
Procedure mov_feld(adresse1, adresse2)
CopyMemory(adresse2, adresse1, (#xsize+1)*(#ysize+1)*4)
EndProcedure
Der Arbeitsspeicher ist nicht voll, und get hat eigentlich einen Schutz, damit man nicht über die Arraygrenzen hinaus greift.
Ich kann die Abstürtze leider nicht direkt Reproduzieren.
Seht ihr irgendwelche Logikfehler?
Danke!