Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : pointeurs et structures [ Divers / Général ] (glipper)

mardi 11 juillet 2006 à 21:36:18 | pointeurs et structures

glipper

Membre Club
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 :
  • 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.
  • 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....
Si vous avez d'autres commentaires à faire sur ce code, n'hésitez pas à m'en faire part.
Merci d'avance,
Glipper

mardi 11 juillet 2006 à 21:45:40 | Re : pointeurs et structures

mondrone

Membre Club
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)


  Qui ne tente rien...
  Ne risque pas d'avoir grand chose !!!


mardi 11 juillet 2006 à 21:46:42 | Re : pointeurs et structures

mondrone

Membre Club
Sinon, car je répond peut être à côté, avec un sizeof du résultat ya pas moyen de savoir le nombre de fiches dans ton programme ?


  Qui ne tente rien...
  Ne risque pas d'avoir grand chose !!!


mardi 11 juillet 2006 à 22:50:30 | Re : pointeurs et structures

BruNews

Administrateur CodeS-SourceS
sizeof() donnerait 4 (taille d'un pointeur) sur system 32 et 8 sur 64 mais rien de plus intéressant.

ciao...
BruNews, MVP VC++

mercredi 12 juillet 2006 à 00:14:25 | Re : pointeurs et structures

Zootella

Réponse acceptée !



>fiche = (Fiche*) malloc(sizeof(Fiche)*n+1);

A quoi sert le + 1 ?

Pour la taille suffit de passer un pointeur sur int.

Fiche *Ami;
int taille;
Ami = DownloadFiche( &taille );

------------------------------------

free(Ami);
Fiche* DownloadFiche( int *size )
{
    int n = 5;
    Fiche *fiche = (Fiche*) malloc(sizeof(Fiche)*n);
    *size = n;
     return fiche;
}




mercredi 12 juillet 2006 à 00:20:52 | Re : pointeurs et structures

glipper

Membre Club
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 :)

Merci



Cette discussion est classé dans : fonction, mémoire, ami, fiche, downloadfiche


Répondre à ce message

Sujets en rapport avec ce message

Question sur l'allocation de mémoire... [ par kod32 ] Salut,j'ai une question concernant l'allocation de mémoire et notamment l'utilisation de la fonction malloc. Cette fonction permet de pointer vers un Problème avec la fonction free dans visual basic. [ par tobi222 ] J'ai créé une liste chainée toute simple avec où j'alloue de la mémoire dynamiquement et à la fin lorsque je détruis cette liste avec free visual m'en Prob lecture adresse mémoire [ par xmaz57000 ] Voilà je viens de recevoir un ordinateur industriel qui dispose en standard de 8 entrées TOR.Malheureusement, il n'y a aucun driver qui permet de récu taille de libération mémoire [ par mezaya ] Bonjour, Je voudrai savoir si il existe un moyen de récuperer la taille mémoire que va libérer la fonction free ? Voila en faite j'aimerai surcharge Problème mémoire Visual C++ 2005, (pourtant il n'y a pas de mémoire "dynamiquement allloué") [ par Sim 2005 ] J'ai un programme qui utilise beaucoup plus de mémoire qu'il ne le devrait. Toutes les variables sont statiques, il ne peut s'agir d'une fuite de mémo Sauvegarder une adresse mémoire [ par gmorello ] Bonjour, voici mon problème:Dans mon code j'ai une fonction importer d'une dll (Je n'ai pas acces au source de cette dll) qui me détraque mes adresses Allocation dynamique de mémoire d'un tableau dans une fonction [ par DJfewos971 ] Bonjour a tous,mon problème est de pouvoir alloué la mémoire dynamiquement d'un tableau dans une fonction.Voici mon problème niveau Code:#include #inc Bouffage de mémoire :( [ par max12 ] http://www.cppfrance.com/code.aspx?ID=31739 Le problème se trouve au niveau de la fonction void TraitementPacket(int par fonction qui retourne une chaine==>libération de la mémoire [ par tibob51 ] Bonsoir,J'ai eu besoin d'utiliser une fonction me retournant une chaine,après mes recherches sur cpp france j'ai trouvé la syntaxe suivante:char* Fonc Creation fonction malloc [ par LordBob ] Bonjour a tous,voila en cours on est en train de faire un TP sur la gestion de la mémoire et on doit programmer la fonction malloc. Pour la partie thé


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,716 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.