begin process at 2012 02 12 05:49:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

pointeurs et structures


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

pointeurs et structures

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ée 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 Connaitre la consommation mémoire [ par Ilsundal ] Bonjour à tous, Sous Windows pour connaître l'utilisation mémoire d'une application j'utilise la fonction "GetProcessMemoryInfo", j'aurais souhaité s 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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 7,098 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales