glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 2016
-
11 juil. 2006 à 21:36
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 2016
-
12 juil. 2006 à 00:20
Bonjour,
j'ai declaré dans un de mes programmes une structure dans un fichier header :
typedef struct Fiche
{
char iop[30];
} Fiche;
Ensuite, dans un fichier .c, j'ai procédé comme ceci :
....
Fiche *Ami;
Ami = DownloadFiche();
free(Ami);
....
Voilà la fonction DownloadFiche() :
Fiche* DownloadFiche()
{
Fiche *fiche;
...
fiche = (Fiche*) malloc(sizeof(Fiche)*n+1); // avec n une variable calculée dans la fonction
....
return fiche;
}
J'aurais deux questions sur ce programme :
<li>Tout d'abord, n'y a t'il pas de fuite mémoire en procédant comme je l'ai fait : attribuer dynamiquement de la mémoire dans la fonction DownloadFiche, puis la liberer en dehors de la fonction.</li><li>Ensuite, comment puis-je connaître le nombre de fiches que retourne la fonction ? En effet, dans la fonction, le malloc attribue de la mémoire pour n fiches. Mais comment puis-je ensuite connaître la taille de Ami ? Si je fais sizeof(Ami) je récupere la taille en octet je suppose, et strlen() c'est pour les chaines de characteres, pas pour les chaines de structure....</li>Si vous avez d'autres commentaires à faire sur ce code, n'hésitez pas à m'en faire part.
Merci d'avance,
Glipper
mondrone
Messages postés246Date d'inscriptionmercredi 5 janvier 2005StatutMembreDernière intervention11 mars 2012 11 juil. 2006 à 21:45
Si tu ne retourne qu'un pointeur sur l'un comme c'est le cas (je ne dit pas qu'il est possible de faire autrement) alors tu as intérêt à chaîner tes fiches en interne :
struct Fiche contiendrait alors un struct Fiche *suivant
de cette manière tu peux te ballader facilement dedans, manipuler les fiches en les changeant d'emplacement et saoir le nombre de fiches (quand tu parcours l'arbre, tu compte)
glipper
Messages postés246Date d'inscriptiondimanche 2 juin 2002StatutMembreDernière intervention11 septembre 20161 12 juil. 2006 à 00:20
Oki zootella j'y avais pensé à cette methode... je pense que je vais faire comme ça.
Sinon pour le
(Fiche*) malloc(sizeof(Fiche)*n+1);
j'ai mis le +1 car pour une chaine de charactere, on rajoute +1 pour le '\0'. Là, je savais pas trop alors dans le doute, je l'ai mis (mieux vaut trop que pas assez). Je vais l'enlever :)