[C] Probleme Malloc et Free

Résolu/Fermé
ssebounet Messages postés 162 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 octobre 2008 - 9 mai 2005 à 10:35
ssebounet Messages postés 162 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 octobre 2008 - 9 mai 2005 à 12:08
Bonjour à tous!!!
J'ai un petit soucis!!
je souhaiterai allouer de la memoire en C mais lorsque je la libère j'ai un souci!
je l alloue comme ca:

int len;
int i;
char *Params[20];
char *Value[20];

len = 20;

for(i = 0; i < len; i++)
{
Params[i] = (char*) malloc(len * sizeof(char) );
Value[i] = (char*) malloc(len * sizeof(char) );
memset(Params[i], 0, len);
memset(Value[i] , 0, len);
}


apres je rentre des valeurs dans ces deux tableaux de pointeurs puis je souhaite les libérer:

for(i = 0; i < len; i++)
{
free(Params[i]);
free(Value[i]);
}

Mais lorsque je passe sur free, le debugger me genere une erreur:
Debug Assertion Failed
file dbgheap.c
etc etc
enfin bon je ne comprend pas!!!
quelqu un aurait une idée???

Merci beaucoup d avance!!

Séb
A voir également:

9 réponses

sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
9 mai 2005 à 10:41
tes variables 'Params' et 'Value' doivent etres dans la meme fonction OU variables globales
1
ssebounet Messages postés 162 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 octobre 2008 6
9 mai 2005 à 10:50
elles le sont dans la meme fonctions!!
Merci beaucoup deja pour ta reponse!!

Merci d'avance
Séb
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
9 mai 2005 à 10:55
donc tous le code que tu as donné se trouve dans une seule et unique fonction
0
ssebounet Messages postés 162 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 octobre 2008 6
9 mai 2005 à 10:56
Oui dans une seule fonction!!

Merci d'avance
Séb
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
9 mai 2005 à 11:01
c'est bizarre, j'ai fait ce code et ça marche!

#include <stdio.h>
#include <stdlib.h>

void main()
{
 int len;
 int i;
 char *Params[20];
 char *Value[20];

 len = 20;

 for(i = 0; i < len; i++)
 {
 Params[i] = (char*) malloc(len * sizeof(char) );
 Value[i] = (char*) malloc(len * sizeof(char) );
 memset(Params[i], 0, len);
 memset(Value[i] , 0, len);
 }

 for(i = 0; i < len; i++)
   scanf("%s",Params[i]);

 for(i = 0; i < len; i++)
   printf("%d %s\n",i,Params[i]);

 for(i = 0; i < len; i++)
 {
 free(Params[i]);
 free(Value[i]);
 }
}


le probleme provien peut-etre de ton traitement sur les donnees
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
9 mai 2005 à 11:02
Et
free(param);
free(values);

ca marcherait pas ?
0
ssebounet Messages postés 162 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 octobre 2008 6
9 mai 2005 à 11:24
nan deja essayer
mais en fait j ai trouver je pense!
apres avoir fait le malloc j'assignais directement les characteres!
ex:
Params[0] = "truc";
mais en fait faut faire strcpy(Params[0], "TRUC");
et la apres ca fonctionne!!!
donc faut que je change tout mon code pour utiliser les fonctions str*.

en tout cas merci bien de votre aide!!!!

Merci d'avance
Séb
0
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
9 mai 2005 à 11:27
de rien (ça provenait des traitements donc :) )
0
ssebounet Messages postés 162 Date d'inscription jeudi 21 mars 2002 Statut Membre Dernière intervention 22 octobre 2008 6
9 mai 2005 à 12:08
ouaip exactement
je pensais qu on pouvait enregistrer un 'string' directement mais il faut passer par strcpy!!!
voilou pour ceux qui ont ce pbm c est regler!!!
lol
merci a vous tous en tout cas!!
Merci d'avance
Séb
0