lionel_om a écrit :Cpl.Bator a écrit :Ah bon ?!
Ba si !
Grosse Erreur: quand tu déclare un tableau de 100 * 100, tu déclare en fait un tableau de 101 * 101 !!!
Elle est là la différence...
Ou sinon c'est qu'il y a quiproquo, mais regarde mon exemple. Je rempli une zone de 16 octets et je boucle dessus avec une double boucle For...
Y'avait des post y'a longtemps pour comment en savoir plus sur les tableaux: il fallait regarder avant l'adresse mémoire du début du tableau (avant @Tableau(0,[0]) ). Et on pouvait récupérer la taille du tableau, mais c'était en version PB 3.9x et je ne sais pas si c'est encore possible...
Pour ton exemple, tu as fait une erreur:
Code : Tout sélectionner
Dim TBL.l(100,100000)
; Remplissage avec des valeurs aléatoires 0 ou 1
For col = 0 To 100
For lignes = 0 To 10000
TBL( col,lignes) = Random(1)+0
Next lignes
Next col
If @TBL(10,1)-@TBL(10,0)<>4
Debug "pas contigue"
Debug "Adresse (10,0) = "+Str(@TBL(10,0))
Debug "Adresse (10,1) = "+Str(@TBL(10,1))
Debug "Différence = "+Str( @TBL(10,0) - @TBL(10,1) )
Else
Debug "contigue"
EndIf
Debug "Adresse (10,0) = "+Str(@TBL(10,0))
Debug "Adresse (10,1) = "+Str(@TBL(10,1))
Debug "Adresse (10,2) = "+Str(@TBL(10,2))
/Liå

Dans se sens , c'est contigue , tu as juste inversé ligne/colonne , mais l'inverse ( mon code plus haut ) , c'est pas contiguë , tu as un décalage de la largeur du tableau entre chaque élément. ( différence de ligne quoi...)
Grosse Erreur: quand tu déclare un tableau de 100 * 100, tu déclare en fait un tableau de 101 * 101 !!!
Elle est là la différence...
Je le sais
bref , il parle de faire un copymemory ( zone contiguë ) , sur un tableau 2D utilisant mon ordre ( 2° dimension fixe ,1° variable ) , dans se sens , c'est pas contigu , donc pas d'allocate memory...
je sais pas ou tu te barres , ou se que tu essaye de me faire comprendre , mais tu te casses la tête
non, tu as arraysize() qui te renvois le nbr d'éléments.
tu n'a plus qu'a ajouté +1 et multiplier par le nombre de byte pour avoir une taille.
Code : Tout sélectionner
Dim A.i(10)
Debug MemorySize(@A(0))
Debug (ArraySize(A())+1)*4