Bonjour à tous,
Je sais que c'est une question récurrentes mais j'ai besoin d'un peu d'aide. j'alloue un tableau 2d de pointeurs (int) puis je le libère. Et lorsque j'appelle de nouveau celui-ci il semble toujours le reconnaître. J'ai suivit le tutoriel suivant: http://rperrot.developpez.com/articles/c/allocationC/
Un exemple vaut mieux qu'un discours:
Lors de l'execution j'obtiens des 0 ou des chiffres "aleatoires" pour la première ligne et 4 5 6 pour la seconde. La mémoire est-elle bien libérée?
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 k; int **M; // Array of int (contiguous allocation), 2 rows x 3 colums. M = (int **) malloc( 2*sizeof(int*) ); M[0] = (int *)malloc( 2*3*sizeof(int) ); for (k=1;k<2;k++) M[k] = M[k-1] + 3; // values in the array M[0][0] = 1.; M[0][1] = 2.; M[0][2] = 3.; M[1][0] = 4.; M[1][1] = 5.; M[1][2] = 6.; // free free(M[0]); M[0] == NULL; free(M); M == NULL; // print some values printf("%d %d %d \n",M[0][0],M[0][1],M[0][2]); printf("%d %d %d \n",M[1][0],M[1][1],M[1][2]); return 0; }
Si j'ajoute dans la section // free:
j'obtiens l'erreur suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 free(M[1]); M[1] == NULL;
*** Error in `./test': free(): invalid pointer: 0x0000000000c9003c ***
Abandon
Je précise que la manière dont j'alloue la mémoire est faite pour avoir une allocation continue des blocs (compatibilité future avec fortran).
Merci d'avance pour vos lumières.






Répondre avec citation




Partager