Bonjour, j'ai un dépassement de mémoire dont je pense connaitre la provenance (malloc) sans parvenir à la résoudre, voici le code possiblement responsable:
allouerMatrice me permet d'allouer une matrice, libererMatrice de liberer l'espace mémoire attribué, Mat_add est un exemple pour voir comment sont allouées et libérées les matrices. J'ai bien vérifié qu'à chaque fois que j'allouait des matrice, je les libérait après mon return mais j'ai toujours des dépassements de mémoire, ai je une erreur de code, j'espère que quelqu'un poura m'aider, merci grandement.
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 Matrice allouerMatrice(int l,int c){/*allouer une matrice de l lignes et c colonnes*/ Matrice A; int i; A=(Matrice)malloc(sizeof(structMatrice)); A->n=l;A->m=c; A->P=(COMPLEX**)malloc(l*sizeof(COMPLEX*)); for(i=0;i<l;i++) { A->P[i]=(COMPLEX *)malloc(c*sizeof(COMPLEX )); } return A; } void libererMatrice(Matrice A){/*libère l'espace mémoire occupé par la matrice*/ int i; for(i=0;i<A->n;i++)free(A->P[i]); free(A->P); free(A); } Matrice Mat_add(Matrice A, Matrice B){/*renvoie la matrice issue de l'addition de A et de B*/ int i,j; Matrice C, Mat_nulle; if(!deMemeDim(A,B)) { Mat_nulle = Mat_nulle_quelconque(A->n,A->m); return Mat_nulle; } C=allouerMatrice(A->n,A->m); for(i=0;i<A->n;i++){ for(j=0;j<A->m;j++){ //C->P[i][j]=A->P[i][j]+B->P[i][j]; AddComplex(&C->P[i][j],&A->P[i][j],&B->P[i][j]); } } return C; libererMatrice(C); }
Partager