Problème de violation d'accès dans un tableau d'objets d'une classe dérivée
Bonjour
J'ai deux classes CHeisenbergSpin et CHeisenbergSpinEx dérivant de CHeisenbergSpin et l'exemple de code suivant
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| int nStartSize = 3;
double dblPI = CTools::PI;
CHeisenbergSpin **pSpin;
pSpin = (CHeisenbergSpin**)new CHeisenbergSpinEx*[nStartSize];
for (int nIndex = 0; nIndex < nStartSize; nIndex++)
{
pSpin[nIndex] = new CHeisenbergSpinEx[nStartSize];
for (int i = 0; i < nStartSize; i++)
pSpin[nIndex][i].z = 1;
}
pSpin[0][0].Compute(dblPI / 3, dblPI);
pSpin[0][1].Compute(dblPI / 2, dblPI / 3);
pSpin[2][0].Compute(dblPI / 2, dblPI / 3);
pSpin[2][1].Norm();
pSpin[2][2].Compute(dblPI / 2, dblPI / 3);
CHeisenbergSpinEx spinEx = *((CHeisenbergSpinEx*)&pSpin[2][2]);
spinEx.Compute(dblPI / 2, dblPI/3); |
Dès que le 2ème indice du tableau est non nul ça génère une exception.
j'ai remarqué que cela se produit lorsqu'on que la méthode appelée est surcharchée (Compute est surchargée par la classe dérivée)
bien évidemment la ligne 17 fonctionne sans problème.
J'ai également testé le code suivant
Code:
1 2 3 4
| CHeisenbergSpin *pSpin = new CHeisenbergSpinEx[nStartSize];
pSpin[0].Compute(dblPI / 2, dblPI / 3);
pSpin[1].Compute(dblPI / 3, dblPI);
pSpin[2].Compute(dblPI, dblPI); |
Les lignes 3 et 4 génèrent une exception.
Pourquoi est ce que les objets à ces positions génèrent une excption
Est ce qu'il y a un moyen d'appeller les fonctions surchargées sans faire un cast explicite
J'espère que j'ai été assez clair
Merci d'avance pour toute aide