Erreur quand je execute mon prog : j'utilise deux tablea u alloues par malloc
Code:
1
2
3
4 *** glibc detected *** free(): invalid next size (fast): 0x0804a018 *** Program received signal SIGABRT, Aborted. 0xffffe410 in __kernel_vsyscall ()
Version imprimable
Erreur quand je execute mon prog : j'utilise deux tablea u alloues par malloc
Code:
1
2
3
4 *** glibc detected *** free(): invalid next size (fast): 0x0804a018 *** Program received signal SIGABRT, Aborted. 0xffffe410 in __kernel_vsyscall ()
Bonjour,
un jardinage en regle de la mémoire ?
es tu sur de ne pas utiliser de la memoire qui ne t appartiens pas ?
Pourrais tu isoler le bout de code correspondant (allocation et utilisation du tableau et l'appel a free) parce que la ca fait pas beaucoup de pistes a suivre
en faite les valeur insere dans les deux tableaux j'aurai besoind 'eux durant tout l'execution de mon pogramme je ne libere la mémoire qu'apres avoir fini toute l'execution des instruction apres l'allocation c'est toujrs la meme erreur:
Voila mon code en faite
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 tab1=(int*)malloc(n*sizeof(int)); if((fp=fopen(SORTIE, "r"))==NULL) { fprintf(stderr,"\n impossible"); return(EXIT_FAILURE); } fscanf(fp,"%d\n",&n); printf("\n"); for(i=0;i<n;i++) fscanf(fp,"%d\n",&tab1[i]); for(i=0;i<n;i++) printf("%d\n",tab1[i]); printf("\n"); tab2=(double*)malloc(n*sizeof(double)); for(i=0;i<n;i++) fscanf(fp,"%le\n", &tab2[i]); for(i=0;i<n;i++) printf("%le\n",tab2[i]); fclose(fp); free(tab1); free(tab2);
Je ne comprends pas pourquoi tu alloues ton tableau avant d'en lire la taille dans le fichier.
si j ai bien compris le premier entier lu dans le fichier donne le nombre d'entier a stocker.
Dans ce cas ton malloc de tab1 doit etre apres le premier fscanf non ?
le premier entier lu constitue la taille de la boucle 4 : apres j'ai 8 autres valeur qui suivent. en faite l'affichage c'est fait normal mais enfin de ligne il m'affiche l'erreur de plus.
ce que veut dire BainE c'est que tu écris :
Donc ton n pour l'allocation il vient d'où ???Code:
1
2
3
4
5
6 tab1=(int*)malloc(n*sizeof(int)); ..... fscanf(fp,"%d\n",&n);
En effet,
- n n'est pas initialisé avant l'allocation.
- Les casts du retour de malloc() sont inutiles, enlève-les.
- Tu oublies de tester le retour de malloc().
- Pour le sizeof, deux écoles s'affrontent, et l'une d'elles conseille d'utiliser sizeof *tab1 et sizeof *tab2 au lieu de sizeof(int) et sizeof(double).