Tentative de R/W de m�moire prot�g�e
[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:
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:
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:
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:
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 :
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:
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...