Bonjour,
J'ai écrit un code c++ ou j'utilise des fonction qui retournent et reçoivent des tableau uni et bidimentionnelle, j'ai utilisé pour cela les opérateur new et delete[] et là j'ai rencontré le pb de fuites de memoire que j'ai pas pu detecter ; alors j'ai fait recour à la class std::vector et là j'ai pas rencontrer le pb des fuites de mémoire mais le temps d'éxécution est augmenter d'une façon très considérable dans le premier cas j'ai eu 591000 millisecondes et dans le deuxième 6.214e+006 millisecondes, je vous donne un exemple d'une fonction qui reçoit une matrice 'a' et un tableau 'b' en paramètre et retourne la sous matrice de 'a' dont les colonnes sont spécéfié dans b.
Utilisation de l'allocation dynamique:
Utilisation de la classe std::vector
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 double * sous_matrice(double * a,int *b, int m, int e,int l) { double *cl = new double[m * e]; int i,j; for(i=0;i<m;i++) for(j=0;j<e;j++) { cl[i*e+j]=a[i*l+b[j]]; } return(cl); }
Alors je sais pas est ce que le problème est dans l'utilisation de la class std::vector; ou l'allocation dynamique est meilleur que cette dernière dans le temps d'éxécution et là je doit detecter ou sont les fuites de 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 typedef vector<double> Vec; typedef vector<int> VecInt; typedef vector<vector<double>> mat; mat sous_matrice(mat & a,VecInt & b, int m, int e,int l) { mat cl(m,vector<double>(e)); int i,j; for(i=0;i<m;i++) for(j=0;j<e;j++) { cl[i][j]=a[i][b[j]]; } return(cl); }
Partager