Core sur un free
AA
-
AA -
AA -
Bonjour,
je suis entrain de revoir un code qui core. Je ne comprends pas pourquoi est-ce qu'il core sur un free.
On a un tableau de chaine de caracteres (char**). On verifie síl est nul et si chaque element est nul puis on libere la memoire:
if (tokenpp != NULL) {
for(i=0;i < nb_token; i++) {
if (tokenpp[i] != NULL) {
free(tokenpp[i]);
tokenpp[i] = NULL;
}
}
free(tokenpp);
tokenpp = NULL;
}
Le programme core sur free(tokenpp[i]);
Est-ce que quelqu un aurait une idee svp?
Merci.
je suis entrain de revoir un code qui core. Je ne comprends pas pourquoi est-ce qu'il core sur un free.
On a un tableau de chaine de caracteres (char**). On verifie síl est nul et si chaque element est nul puis on libere la memoire:
if (tokenpp != NULL) {
for(i=0;i < nb_token; i++) {
if (tokenpp[i] != NULL) {
free(tokenpp[i]);
tokenpp[i] = NULL;
}
}
free(tokenpp);
tokenpp = NULL;
}
Le programme core sur free(tokenpp[i]);
Est-ce que quelqu un aurait une idee svp?
Merci.
Configuration: Windows 2000 Internet Explorer 6.0
2 réponses
-
Merci de préciser le langage... Ca peut paraitre évident mais bon...
if (tokenpp != NULL) { free(tokenpp); tokenpp=NULL }
Inutile de faire une boucle. Enfin ca depend aussi de ton code précédent...
-
-
En fait il aurait été bien de voir la déclaration de ton tokenpp ainsi que son allocation.
si c'est un :int *tokenpp;
Alors si tu fait ce que je te dis, tu ne perdras pas la mémoire. La taille de ton taleau a été transmis de malloc() a free().
Si en revanche tu as fait une allocation et une boucle d'allocation (Tableaux 2D) tu dois en effet faire des free() en boucle.
-
-
Salut,
char **tokenspp = NULL;
tokenspp = (char **)malloc(sizeof(char *) * nb_token);
tokenspp[i] = (char *)calloc(y, sizeof(char));
strncpy(tokenspp[i], datap, x);
if (tokenpp != NULL) {
for(i=0;i < nb_token; i++) {
if (tokenpp[i] != NULL) {
free(tokenpp[i]);
tokenpp[i] = NULL;
}
}
free(tokenpp);
tokenpp = NULL;
}
C'est bien une boucle dont j'ai besoin. Je ne comprends pas pourquoi avec la boucle que je fais j'ai un core sur le free(tokenpp[i]);
Je dois surement louper qqc mais je n arrive pas a voir quoi.
Merci pour ton aide.-
-
-
-
Desole, le code existant est constitue de la sorte:
une fonction get_tokens a ete creee:
char ** get_tokens(
char *datap,
char sep,
int *nb_tokenp,
int flag)
Dans laquelle on fait la partie:
char **tokenspp = NULL;
tokenspp = (char **)malloc(sizeof(char *) * nb_token);
tokenspp[i] = (char *)calloc(y, sizeof(char));
strncpy(tokenspp[i], datap, x);
Puis dans une autre fonction on fait appel a celle ci:
char **tokenspp = NULL;
tokenpp = get_tokens(addressp, '\n', &nb_token, BOOLEAN_FALSE);
on recupere les donnees dans tokenpp et enfin on fait la boucle que je t'ai mis en haut avec le free.
A aucun moment je fais :
tokenpp[i]=NULL;
sauf apres les free. Je considere quún malloc et un calloc mettent automatiquement a null les poiteurs.
Merci -
-