Golfy a écrit :Enfin, est-ce que cet exemple est juste ?
Code : Tout sélectionner
Procedure Test(nb)
*TTT = AllocateMemory(nb)
ProcedureReturn *TTT
EndProcedure
*W = test(10)
*Y = test(10)
*Z = test(10)
Debug *W
Debug *Y
Debug *Z
Debug SizeOf(*Y)
En effet, après plusieurs lancements, je constate un écart de 32 octets entre les valeurs *W, *Y et *Z (alors que Sizeof indique 8 octets).
(Win7 64 bits, PB 5.00 beta 4)
Merci d'avance,
Si tu constates des écarts, c'est normal car "Debug *Z" te donne l'adresse contenue dans le pointeur *Z : l'adresse vers laquelle pointe *Z
et pareil pour les autres pointeurs.
Comme tu affectes la mémoire à chaque fois, chaque zone mémoire possède une adresse différente, et elle sont au moins éloignée de leur taille (sinon il pourrais y avoir chevauchement).
Le "Sizeof(*Y) te renvoie la taille du pointeur, comme tu obtiens 8 je suppose que tu compiles avec PB x64bit,
la taille du pointeur est celle que tu déclares en faisant : "*mon_pointeur.i" ou "mon_pointeur.l", il vaut mieux toujours utiliser le type integer.
Par contre si tu utilises une structure pour ton pointeur, pas besoin de te préoccuper de ça.
Pour tes images, il me semble que tu te trompes lorsque tu écris : name @B
je ne sais pas si B pour toi c'est le contenu de là ou pointe le pointeur *B, mais ça ne marche pas comme ça.
*B et B sont des variables complétement séparé en PB.
Faire @B te renvoie l'adresse de la variable B
Faire @*B te renvoie l'adresse du pointeur *B
Faire *B = @Buffer assigne l'adresse de la variable Buffer dans le pointeur *B
Faire *B = *Buffer assigne l'adresse vers laquelle pointe *Buffer dans le pointeur *B
(Au dessus, Buffer et *Buffer sont des trucs différents, comme expliqué plus haut)
C'est plus clair ?
