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
size_t n = 123;
T *p = malloc (sizeof *p * n);
|
Le couple {taille, adresse} étant inséparable, on a tout intérêt à entériner la chose :
struct objet
{
size_t n;
T *p;
};
{
struct objet mon_objet;
mon_objet.n = 123;
mon_objet.p = malloc (sizeof *p * mon_objet.n);
}
|
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
Message édité par Emmanuel Delahaye le 25-01-2006 à 14:59:34
---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/