Connaitre la taille d'un buffer [C] - C - Programmation
Marsh Posté le 25-01-2006 à 12:21:02
Si tu as juste un pointeur sur une zone mémoire, tu ne peux pas en connaître la taille.
Et si tu veux en connaître le nombre d'éléments pour la désallocation, j'imagine que c'est ce que tu as : des ** (pointeurs de pointeurs), au minimum.
Bref, la taille tu la connais à l'allocation, et il ne faut pas perdre cette valeur.
Marsh Posté le 25-01-2006 à 13:04:23
ClosterHV a écrit : Voici ma problématique : j'ai un buffer alloué dans une certaine partie du code. Je voudrais connaitre - au moment de le désallouer - sa taille. |
Lorsque un bloc est alloué par malloc(), son adresse est retournée, et, pour des raisons pratiques évidentes (accéder au bloc, le libérer), cette adresse est stockée dans une variable capable de stocker une adresse, c'est à dire un pointeur du bon type (ou void). L'information de taille n'est pas stockée de manière visible (elle est probablement stockée par le système, mais on a aucun moyen standard d'y accéder). La stratégie consiste donc à stocker nous même la taille.
Pseudo-code
|
Le couple {taille, adresse} étant inséparable, on a tout intérêt à entériner la chose :
|
On peut aussi encapsuler, rendre la structure anonyme etc. On ne va pas rappeler les 'Bonnes Pratiques' de codage, on les connait...
http://mapage.noos.fr/emdel/tad.htm
Citation : J'ai pensé à sizeof(), mais cette fonction ne me retourne pas cette information (d'ailleurs, je me demande ce qu'elle retourne : pour un buffer de "char" de 256 élements, sizeof me renvoie 4 ???). |
C'est la taille en bytes d'une variable pointeur sur ta machine. Cette information ne permet évidemment pas de connaitre la taille de l'objet pointé.
http://mapage.noos.fr/emdel/notes.htm#pointeurs
Marsh Posté le 25-01-2006 à 14:10:12
et sizeof n'est pas une fonction mais un operateur, 'sizeof X' est une expression résolu à la compilation et donc constante
Marsh Posté le 25-01-2006 à 12:15:27
Salut,
Voici ma problématique : j'ai un buffer alloué dans une certaine partie du code. Je voudrais connaitre - au moment de le désallouer - sa taille.
J'ai pensé à sizeof(), mais cette fonction ne me retourne pas cette information (d'ailleurs, je me demande ce qu'elle retourne : pour un buffer de "char" de 256 élements, sizeof me renvoie 4 ???).
Comment peut-on procéder ??
Merci.