[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 :

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.
et le programme s'arrête dans un des 3 constructeurs (n'importe lequel).
Voici le code du constructeur par valeurs :

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;
		}
	}
 
}
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
 
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);
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
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);
}
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
 
M4 = M3->transp();
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
 
this->valeurs = new double* [this->dimX] ;
Avez-vous une idée de la source du pb ???

Merci !

PS : Ah oui, pour ceux qui auraient remarqué ou qui se posent la question, c'est volontaire que mes membres soient public...