Bonjour à tous,
je code (ou plutot debugge) en ce moment sur un petit programme de calcul sur des matrices:
Je pars d'un tableau de flottants à deux dimensions (pouvant atteindre 10000 * 10000), le remplissage de ce tableau se passe tres bien.
La deuxième étape consiste à convertir les valeurs de ce tableau en 0 si on celle-ci dépasse un seuil donné (0.9521 par exemple) en 1 sinon.
Je ne dois en aucun cas modifier le tableau de flottant, car la conversion en 0 ou 1 intervient au sein d'un boucle avec incrementation du seuil à chaque tour.
Je n'ai pas d'erreur à la compilation (gcc sous red hat) mais une segmentation fault qui arrive (la plupart du temps) au moment du malloc pour le tableau d'entier. Le plus bizarre, c'est que mon programme tourne pour des petites instances (dimension du tableau environ 10*10) mais seg fault pour les dimension plus importantes (c'est ennuyeux sachant que ça doit tourner sur du 10000 * 10000).
ci joint les morceaux de codes qui me posent probleme:
l'appel de mes fonctions:
fonction d'allocation de memoire pour mes tableaux d'entier (celle pour le tableau de flottant est identique mis à part le cast en float)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int main (int argc, char *argv[]){ C = f2float(Size[0], Size[1]); C = GetCoord(Mtab, Size); Cos = CosCompute(C, Size); C = deletePointer2float(C, Size[0], Size[1]); printMCos(NVecteurs, Cos, Size); Madj = f2int(Size[0], Size[0]); Madj = MadjCreate(Cos, Size, SEUIL); Madj = deletePointer2int(Madj, Size[0], Size[0]); return 0; }
fonction de liberation de la memoire alloué pour mes tableaux d'entier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int **f2int(int a, int b){ int i; int **myPointer = (int **)malloc (a * sizeof(int*)); for (i=0; i<a; i++) myPointer[i] = (int *)malloc (b * sizeof(int)); return myPointer; }
fonction de conversion du tableau de flottant en entier (0/1):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char **deletePointer2(char **myPointer, int a, int b){ int i; for (i=0; i < a; i++) { free(myPointer[i]); } free (myPointer); myPointer = NULL; return myPointer; }
merci à tout ceux qui pourront se pencher sur la question.
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 int **MadjCreate(float **Cos, int *Size, float SEUIL){ int **TEMP; int i, j; TEMP = f2int(Size[0], Size[0]);/* la seg fault a lieu ici */ for(i = 0; i < Size[0]-1; i++){ for(j = 0; j < i; j++){ if (Cos[i][j] <= SEUIL) TEMP[i][j] = 1; else TEMP[i][j] = 0; TEMP[j][i] = TEMP[i][j]; } } return TEMP; TEMP = deletePointer2int(TEMP, Size[0], Size[0]); }![]()
Partager