Free et Malloc en C
Résolu/Fermé
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
-
18 déc. 2011 à 15:47
delp95 Messages postés 17 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 16 décembre 2012 - 19 déc. 2011 à 21:43
delp95 Messages postés 17 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 16 décembre 2012 - 19 déc. 2011 à 21:43
A voir également:
- Free et Malloc en C
- Free music mp3 - Télécharger - Conversion & Extraction
- Zimbra free - Guide
- Free mon compte facture - Astuces et Solutions
- Free tv player - Télécharger - Télévision
- Sketchup free - Télécharger - 3D
2 réponses
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
18 déc. 2011 à 16:15
18 déc. 2011 à 16:15
Bonjour,
Soit vous n'avez plus besoin de l'allocation, et vous utilisez free avant d'écraser l'adresse sur la zone, soit vous sauvegardez la variable dans un pointeur pour la libérer plus tard.
Mettez un exemple de votre code pour qu'on puisse voir plus précisément votre problème.
Cdlt,
Soit vous n'avez plus besoin de l'allocation, et vous utilisez free avant d'écraser l'adresse sur la zone, soit vous sauvegardez la variable dans un pointeur pour la libérer plus tard.
Mettez un exemple de votre code pour qu'on puisse voir plus précisément votre problème.
Cdlt,
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
Modifié par delp95 le 18/12/2011 à 16:26
Modifié par delp95 le 18/12/2011 à 16:26
//str est un char* reçu en parametre
char* prochaineAdresse = NULL;
char* adresseInterm = NULL; //pour Sauvegarder le pointeur
//à l'interieur du str_dup est fait le malloc initial pour prochaineAdresse
prochaineAdresse = str_dup(str);
//on SAUVEGARDE l'adresse initiale du pointeur
adresseInterm = prochaineAdresse;
//puis on modifie le pointeur de adressePorchaine dans une autre fonction
//qui retourne une nouvelle adresse (malloc a l'interieur de la fonction)
prochaineAdresse = str_count(prochaineAdresse);
//Et la j'aimerai liberer l'espace mémoire utilisé pour l'adresse precedente, c'est pourquoi j'ai créer adresseInterm
free(adresseInterm); //est ce que c'est comme ça qu'on fait ???
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
18 déc. 2011 à 16:31
18 déc. 2011 à 16:31
C'est bien comme cela qu'on fait.
Mais dans votre cas, vous pouvez même faire :
free(prochaineAdresse)
prochaineAdresse=str_count(prochaineAdresse);
A moins que vous n'ayez pas tout mis et que vous vous servez de l'ancien pointeur.
Mais dans votre cas, vous pouvez même faire :
free(prochaineAdresse)
prochaineAdresse=str_count(prochaineAdresse);
A moins que vous n'ayez pas tout mis et que vous vous servez de l'ancien pointeur.
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
Modifié par delp95 le 18/12/2011 à 16:45
Modifié par delp95 le 18/12/2011 à 16:45
je fais ça en fait :
Mais sa m'affiche n'impote quoi a partir de la deuzieme fois qu'on parcourt while
while(*prochaineAdresse!='\0')
{
//on SAUVEGARDE l'adresse initiale du pointeur
adresseInterm = prochaineAdresse;
//on recupere l'adresse du prochain char différent de c
prochaineAdresse = str_count(prochaineAdresse, &c, &count);
//libere adresse intermadresse
free(adresseInterm); adresseInterm=NULL;
}
Mais sa m'affiche n'impote quoi a partir de la deuzieme fois qu'on parcourt while
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
18 déc. 2011 à 17:01
18 déc. 2011 à 17:01
L'erreur peut venir de str_count. Pourrais-tu poster son code ?
delp95
Messages postés
17
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
16 décembre 2012
18 déc. 2011 à 17:06
18 déc. 2011 à 17:06
/* ----------------------------------------- */
char* str_count(char *str, char *c, int *count)
/* ----------------------------------------- */
{
//on initialise i
int i=0, n;
char* newAdresse = NULL;
//on recupere la taille de la chaine
n = str_len(str);
//on met le premier char dans c
*c=str[0];
if(n==0)
{
*count = 0;
*c = '\0';
return str;
}
if(n==1)
{
*count=1;
*c=str[0];
return str+n; //adresse de '\0'
}
//tant que les char suivants sont identiques au premier char
while(str[0]==str[i])
{
//on incrémente i
i++;
}
*count = i;
//la nouvelle zone est plus petite que l'ancienne, donc on redefini un malloc
//la zone est égale à la taille de str moins le nombre de char qu'on a passé +1 pour le char null
newAdresse = malloc((str_len(str)-i+1)*sizeof(char));
newAdresse = &str[i];
return newAdresse;
}
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 816
18 déc. 2011 à 17:47
18 déc. 2011 à 17:47
newAdresse = malloc((str_len(str)-i+1)*sizeof(char));
newAdresse = &str[i];
Tu fais une allocation dans le heap avec malloc et ensuite, tu mets newAdresse à &str[i]. En gros tu perds l'allocation...
newAdresse = &str[i];
Tu fais une allocation dans le heap avec malloc et ensuite, tu mets newAdresse à &str[i]. En gros tu perds l'allocation...