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
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
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
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;
}
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
 
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;
}
Purify me sort que j'ai 371erreurs dont 368 ABR: Array bounds read et 0 fuite mémoire.
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