à mon avis il n'y a pas de bugs là dedans.
il ne faut pas oublier une chose : allouer une telle taille de tableau je veux bien mais je n'ai pas assez de RAM pour çà.
Donc on obtient un Invalid Memory Access parceque l'allocation mémoire du tableau a échouée.
pour vérifier si le tableau est bien alloué en mémoire on peut faire un Debug @MonTableau().
Si on a 0 (NULL) alors l'allocation a échouée et du coup tout PeekL() & co sont proscrit. Normal en somme.
Par ailleurs, le mieux est d'écrire une macro et non une procedure.
une procedure c'est bcp trop lent pour si peu.
Une macro au contraire fait parfaitement l'affaire - c'est typiquement le cas où elles sont préférables aux procedures.
Code : Tout sélectionner
Macro ARRAY_TYPE(ArrayName)
PeekL(@ArrayName - 4)
EndMacro
Macro ARRAY_SIZE(ArrayName)
PeekL(@ArrayName - 8)
EndMacro
Code : Tout sélectionner
Debug "Taille du tableau : " + Str( ARRAY_SIZE( MonTableau() ) )
Debug "Type du tableau : " + Str( ARRAY_TYPE( MonTableau() ) )
Ensuite il ne faut pas oublier que la taille occupée en mémoire par un tableau dépends du type (byte, long, quad, structures, ...)
on peut s'y essayer avec ce bout de code mais il ne faut pas oublier que tout çà n'est pas 'supporté' par purebasic. C'est du bidouillage pas vraiment 'futur-proof'.
Code : Tout sélectionner
Taille = ARRAY_SIZE( MonTableau() )
Select ARRAY_TYPE(MonTableau())
Case 01 : Taille * SizeOf(Byte)
Case 03 : Taille * SizeOf(Word)
Case 05 : Taille * SizeOf(Long)
Case 09 : Taille * SizeOf(Float)
Case 11 : Taille * SizeOf(Character)
Case 12 : Taille * SizeOf(Double)
Case 13 : Taille * SizeOf(Quad)
EndSelect
Debug Taille