hello,
Dans mon programme je fais pas mal de malloc, et lorsque je fais des free (en plein milieu du prog), ça plante ??? pourquoi, devrais-je faire des calloc ou autre chose ?
hello,
Dans mon programme je fais pas mal de malloc, et lorsque je fais des free (en plein milieu du prog), ça plante ??? pourquoi, devrais-je faire des calloc ou autre chose ?
Sans voir le code, c'est difficile à répondre...Envoyé par gronaze
Par contre, montre un code minimal, compilable qui expose le problème.
Jc
Bonjour,
Qu'est ce qui est utilisé pour allouer dynamiquement de la mémoire si il n'y a pas de malloc() ? calloc() ?je fais pas mal de malloc, et lorsque je fais des free
Un petit bout de code ne serait pas de trop![]()
ok voici une partie de mon code:
ici lorsque free(phrase) n'est pas mit en commentaire, le programme bug!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 int main () { int intermediaire, NW; int tailles[5]; int k; int i,longueur_donnees, j; char phrase_init[20736]; int *avant; unsigned int *phrase; unsigned char *image_finale, *image_finaleF, *image; int **blocT; int *info; char nom[10] = "toto.tiff"; bloc bc; printf("rentrer le texte à transformer en datamatrix\n"); fgets(phrase_init, sizeof phrase_init, stdin); longueur_donnees = strlen(phrase_init) - 1; phrase = (unsigned int *) malloc (sizeof(unsigned int) * longueur_donnees); if (phrase == NULL) { fprintf(stderr,"Allocation phrase impossible \n"); exit(EXIT_FAILURE); } for (i = 0;i < longueur_donnees;i++) { phrase[i] = (unsigned char) phrase_init[i]; //on transcrit notre texte en valeurs ASCII } //free(phrase);
Et ce bout de code là plante quand tu décommentes le free à la fin ?
Si oui, taille encore dans ton code, ôte des bouts qui ne vont pas.
Le débuggeur t'indique que c'est quel free qui plante ?
Salut!
Une petite question, est ce que tu essayes de libérer des zones qui ont déja été préalablement libérées avec un free?
Si oui c'est normal que ca plante, si tu tentes de faire plusieurs free sur une zone déja libérée ca plante ..
Bon courage![]()
Pour aider, il faudrait le code qui pose problème, donc un code compilable, voici ce que j'obtiens...
Ensuite:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 free.c: In function 'main': free.c:14: error: 'bloc' undeclared (first use in this function) free.c:14: error: (Each undeclared identifier is reported only once free.c:14: error: for each function it appears in.) free.c:14: error: syntax error before 'bc' free.c:16: warning: implicit declaration of function 'printf' free.c:16: warning: incompatible implicit declaration of built-in function 'printf' free.c:17: warning: implicit declaration of function 'fgets' free.c:17: error: 'stdin' undeclared (first use in this function) free.c:18: warning: implicit declaration of function 'strlen' free.c:18: warning: incompatible implicit declaration of built-in function 'strlen' free.c:20: warning: implicit declaration of function 'malloc' free.c:20: warning: incompatible implicit declaration of built-in function 'malloc' free.c:21: error: 'NULL' undeclared (first use in this function) free.c:23: warning: implicit declaration of function 'fprintf' free.c:23: warning: incompatible implicit declaration of built-in function 'fprintf' free.c:23: error: 'stderr' undeclared (first use in this function) free.c:24: warning: implicit declaration of function 'exit' free.c:24: warning: incompatible implicit declaration of built-in function 'exit' free.c:24: error: 'EXIT_FAILURE' undeclared (first use in this function) free.c:29: error: syntax error at end of input
On ne fait pas de cast du résultat du malloc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part phrase = (unsigned int *) malloc (sizeof(unsigned int) * longueur_donnees);
Et finalement, si je complète ton code pour qu'il soit compilable et que je fasse un free de ton pointeur phrase, le programme fonctionne...
Jc
eeeuh, oui c'est vrai ça marche!!
désolé... et merci tout le monde
Partager