Bonsoir à tous ,
voici le code qui cherche les diviseur d'un nombre :
Les 4 premières re-allocation mémoire se passent bien mais dès la 5 sème j'obtiens le message suivant. :
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
32
33
34
35
36
37
38 #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { int nombre,index = 0,taille = 1; int *diviseur = malloc(taille); if(argc < 2 || atoi(argv[1]) < 4) { printf("Usage : %s <nombre> --> nombre > 3\n",argv[0]); exit(-1); } nombre = atoi(argv[1]); for(int i=1;i<=nombre;i++) { if(!(nombre%i)) { printf("diviseur trouve !\n"); *(diviseur + index++) = i; if(index == taille) { taille *= 2; printf("re-allocation memoire ...\n"); if((diviseur = (int *) realloc(diviseur,taille)) == NULL) { printf("ERREUR re-allocation mémoire ..."); exit(-1); } } } } printf("Diviseurs de %d : ",nombre); for(int j=0;j<index;j++) { printf(" %d ",*(diviseur + j)); } printf("\n"); return 0; }
Je me doute ,sans en être vraiment certain ,que la zone mémoire doit être translatée à ce moment là ; renseignements pris ,la fonction recopie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 exercice3(50906,0x7fffbfeb73c0) malloc: *** error for object 0x7f82e8402608: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug Abort trap: 6
les données dans la nouvelle zone ; aussi ,un pointeur NULL est renvoyé en cas d'échec et là je ne comprend pas pourquoi le printf() n'est pas
affiché ?!
Quelqu'un peut-il m'aider à y voir clair ?
Partager