[Visual C++ 2005 Express / Windows form / .Net]
Bonjour à tous,
Je suis en train d'écrire une petite classe simple qui me permet de gérer des matrices.
J'ai donc comme membres les dimensions de ma matrice, et un tableau à deux dimensions de double contenant les valeurs de la matrice.
J'utilise les constructeurs par defaut/valeurs/recopie, qui fonctionnent bien ..... jusqu'à un certain temps...
Je m'explique, lorsque je créé plusieurs objet matrices, au bout d'un moment (à la création de la 9 ou 10ème matrice environ), j'obtiens le message d'erreur :
et le programme s'arrête dans un des 3 constructeurs (n'importe lequel).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Une exception non gérée du type 'System.AccessViolationException' s'est produite dans test_classes.exe Informations supplémentaires : Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée.
Voici le code du constructeur par valeurs :
et voici comment je créé mes objets :
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 matrice::matrice(int X, int Y, double valeur) { //Créé une matrice par valeurs int i,j; this->dimX = X; this->dimY = Y; if (Y == 1) this->IsVector = true ; this->valeurs = new double* [this->dimX] ; for (i = 0 ; i < this->dimX ; i++) { valeurs[i] = new double[this->dimY] ; } for (i = 0 ; i < this->dimX ; i++) { for (j = 0 ; j < this->dimY ; j++) { this->valeurs[i][j] = valeur; } } }
J'utilise également des fonctions qui renvoient une matrice. exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 matrice^ M1 = gcnew matrice(3,2,2); matrice^ M2; matrice^ M3 = gcnew matrice(3,3,3.2); matrice^ M4; matrice^ M5; matrice^ V1; matrice^ V2; matrice^ V3; matrice^ V4 = gcnew matrice(5,1,0);
dans ce cas, dans mon programme, je créé une matrice tel que j'ai créé M4 et je fais :
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 //Transposée d'une matrice. matrice^ matrice::transp(void) { int i,j; matrice^ m_res = gcnew matrice(this->dimY,this->dimX,0); for(i=0;i<this->dimX;i++) { for(j=0;j<this->dimY;j++) { m_res->valeurs[j][i] = this->valeurs[i][j]; } } return(m_res); }
voilà, je ne sais pas quoi rajouter pour expliquer la situation. Donc en général, tout fonctionne bien un moment, puis j'obtiens le message d'erreur au niveau de la ligne du constructeur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 M4 = M3->transp();
Avez-vous une idée de la source du pb ???
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 this->valeurs = new double* [this->dimX] ;
Merci !
PS : Ah oui, pour ceux qui auraient remarqué ou qui se posent la question, c'est volontaire que mes membres soient public...
Partager