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.
A voir également:
- Core sur un free
- Open core legacy patcher - Accueil - MacOS
- Zimbra free - Guide
- Word 2013 free download - Télécharger - Traitement de texte
- Core temp - Télécharger - Divers Utilitaires
- Free office - Télécharger - Suite bureautique
2 réponses
Merci de préciser le langage... Ca peut paraitre évident mais bon...
Inutile de faire une boucle. Enfin ca depend aussi de ton code précédent...
if (tokenpp != NULL) {
free(tokenpp);
tokenpp=NULL
}
Inutile de faire une boucle. Enfin ca depend aussi de ton code précédent...
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.
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
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
le langage est le C. Je fais une boucle parce que j'alloue de la memoire pour les elements du tableau.
Si je fais ce que tu dis je perdrai de la memoire.
Merci.
si c'est un :
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.