Bon, j'ai toujours un pb de dépassement de mémoire, voici mon pb:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
Matrice C, cm;
...
C = Mat_Vandermonde (NL, &zm);
cm = Mat_pseudoinvMat(C);
 
	libererMatrice(C);
	libererMatrice(Rm);
	libererMatrice(cm);
	libererMatrice(c);
...
fin
et les fonctions:

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 
static Matrice allouerMatrice (int l, int c)
{
   Matrice A = (Matrice)malloc (sizeof *A);
   A->n = l;
   A->m = c;
   A->P = (COMPLEX**)malloc (l * sizeof *A->P);
   {
      int i;
      for (i = 0; i < l; i++)
      {
         A->P[i] = (COMPLEX *)malloc (c * sizeof *A->P[i]);
      }
   }
   return A;
} 
 
void libererMatrice (Matrice A)
{
   if (A != NULL)
   {
      if (A->P != NULL)
      {
         int i;
         for (i = 0; i < A->n; i++)
         {
            free (A->P[i]);
         }
      }
      free (A->P);
   }
   free (A);
} 
Matrice Mat_Vandermonde (int Mat_length, P_COMPLEX zm)
{
// D = [zm^n conj(zm)^n] , n=[0;NL-1]' 
int i;
COMPLEX zm_puiss;
COMPLEX zm_conj_puiss;
Matrice D;
 
D=allouerMatrice(NL,2);
 
	for (i = 0; i <= (Mat_length - 1); i++)
	{
		PuissComplex(&zm_puiss,zm,i);
		ConjComplex(&zm_conj_puiss,zm);
		PuissComplex(&zm_conj_puiss,&zm_conj_puiss,i);
		//SetComplex(&C[i][0],zm_puiss.re,zm_puiss.im);
		//SetComplex(&C[i][1],zm_conj_puiss.re,zm_conj_puiss.im);
		D->P[i][0] = zm_puiss;
		D->P[i][1] = zm_conj_puiss;
 
	}
	return D;
	libererMatrice(D);
}
Matrice Mat_pseudoinvMat(Matrice A){/*renvoie la matrice pseudoinverse de A*/
     Matrice t_A,pseudoinv_A, dot_t_AA, inv_dot_t_AA;
     t_A = Mat_transpose(A);
	 dot_t_AA = Mat_dot(t_A,A);
	 inv_dot_t_AA = Mat_invMat(dot_t_AA);
     pseudoinv_A=Mat_dot(inv_dot_t_AA,t_A);
     return pseudoinv_A;
	 libererMatrice(t_A);
	 libererMatrice(dot_t_AA);
	 libererMatrice(inv_dot_t_AA);
	 libererMatrice(pseudoinv_A);
 
 }
les fonctions Mat_transpose(A), Mat_dot(t_A,A), Mat_invMat(dot_t_AA) procèdent comme Mat_pseudoinvMat(Matrice A), j'alloue de la place pour chaque matrice que je libère à la fin de la fonction et après appel de celles-ci!... Pour les fonction contenant le mot complex, il n'y a pas de malloc.

Mon pb donc se situe je pense fortement au niveau de la libération de mémoire, j'ai vérifié et pense libérer pourtant toute les matrices pour lesquelles j'ai atribué de la mémoire, je ne comprend pas, j'ai un dépassement de mémoire lors de l'execution du code qui compile bien.