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

glipper
|
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
|
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
|
mardi 11 juillet 2006 à 22:50:30 |
Re : pointeurs et structures

BruNews
|
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
|
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
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é
Livres en rapport
|
Derniers Blogs
TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|