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...