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 .c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 test
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
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 : 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
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
Partager