Bonsoir,
J'ai quelques soucis de gestion dynamique de la mémoire, mini-purify les a détecté mais je n'arrive pas à les résoudre.
j'ai un programme test, un .h de déclarations des fonctions et un .c où sont définies ces fonctions.
Il s'agit de calculer les transformées en cosinus discrète des coefficients d'une matrice test donnée
Voici mon .h
Mon .cCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #ifndef DCT__H #define DCT__H typedef struct { int** coeff; int lignes; int colonnes; } matrice; void initialiser_matrice(matrice m); int heaviside(int u); int corps_dct(matrice m,int taille,int x,int y,int u,int v); int coeff_dct(matrice m, int u, int v); #endif
et mon programme de testCode:
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
39
40
41
42 #include "DCT.h" #define PI 3.14 int heaviside(int u){ return (u == 0); } void initialiser_matrice(matrice m){ m.coeff=0; m.lignes=0; m.colonnes=0; } int corps_dct(matrice m,int taille,int i,int j,int u,int v){ int resultat; taille= m.lignes*m.colonnes; resultat=(m.coeff[i][j])*cos(((2*i+1)*PI*u)/(2*taille))*cos(((2*j+1)*PI*v)/(2*taille)); return resultat; } int coeff_dct(matrice m, int u, int v){ int taille; int i, j, temp; taille= m.lignes*m.colonnes; temp=0; /*Facteurs de la double sommation*/ int a=(2/taille)*(1/sqrt(2)); int b=heaviside(u)+heaviside(v); int c= pow(a,b); /*Double sommation*/ for (i=0; i<=taille-1; i++){ for(j=0; j<=taille-1; j++){ temp += corps_dct(m, taille, i, j, u, v); } } /*Resultat*/ temp=temp*c; return temp; }
Purify me sort que j'ai 371erreurs dont 368 ABR: Array bounds read et 0 fuite mémoire.Code:
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
39
40
41
42 int main(){ matrice t; initialiser_matrice(t); int i, j; /*Allocation de mémoire*/ t.coeff=malloc(8*sizeof(int*)); for (i=0; i<=8; i++) t.coeff[i]=malloc(8*sizeof(int)); if (t.coeff != NULL){ t.lignes=8; t.colonnes=8; t.coeff[0][0]=139; t.coeff[0][1]=144; t.coeff[0][2]=149; t.coeff[0][3]=153; t.coeff[0][4]=155; t.coeff[0][5]=155; t.coeff[0][6]=155; t.coeff[0][7]=155; t.coeff[1][0]=144; t.coeff[1][1]=151; t.coeff[1][2]=153; t.coeff[1][3]=156; ... t.coeff[7][4]=163; t.coeff[7][5]=158; t.coeff[7][6]=158; t.coeff[7][7]=158; for (i=0; i<=7; i++){ for (j=0; j<=7; j++) printf("%d ", coeff_dct(t, i, j)); printf("\n"); } for (i=0; i<=8; i++) free(t.coeff[i]); free(t.coeff); } return EXIT_SUCCESS; }
les ABR sont localisées dans la définition de la fonction corps_dct et coeff_dct respectivement, au moment d'appeler les valeurs m.coeff[i][j] et au moment d'appeler corps_dct... donc la même erreur en gros.
Et dans mon programme de test, au moment d'appeler coeff_dct.. toujours la même erreur il me semble.
Il doit yavoir un soucis dans mes malloc!
J'attend vos réponses