Bonjour,
J'ai quelques problèmes à redimensionner une matrice :
Je sais comment la redimensionner, et ça marche très bien. Mais dans ce cas là, j'ai une erreur de la sorte à la fin, en mode DEBUG :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 typedef std::vector<bool> TBoolArray; typedef std::vector<TBoolArray> TBoolMatrix;
Donc l'application essaye d'écrire dans la mémoire à la fin de son exécution.
Voici le code donnant lieu à tout ça :
m_CollisionTable est donc une TBoolMatrix, membre privé de la classe CSprite.
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
25
26
27
28
29
30
31
32 void CSprite::BuildCollisionTable() { // Redimensionnement de la matrice de collision m_CollisionTable.resize( Height ); for(int i = 0; i < Height; i++) { m_CollisionTable[i].resize( Width ); for(int j = 0; j < Width; j++) { m_CollisionTable[i][j] = false; } } // Verrouillage de la texture D3DLOCKED_RECT Rect; if( m_Texture->lpTexture->LockRect(0, &Rect, &rSprite, D3DLOCK_READONLY) != D3D_OK ) return; unsigned long* iPixels = reinterpret_cast<unsigned long*>(Rect.pBits); unsigned int iPitch = Rect.Pitch >> 2; // Construction de la matrice à partir du canal alpha for (int i = 0; i < Height; i++) for (int j = 0; j < Width; j++) { m_CollisionTable[i][j] = ((Dragoon::CColor(iPixels[j + i * iPitch])).GetAlpha() != 0x00); } // Déverrouillage de la texture m_Texture->lpTexture->UnlockRect(0); }
Lorsque je n'appelle pas BuildCollisionTable, ça marche. Plus précisément, lorsque la matrice n'est pas redimensionnée, je n'ai pas l'erreur.
Si je supprime la partie qui sert à remplir la matrice, j'ai droit tout de même à l'erreur. Il n'y a que le redimensionnement qui provoque l'erreur.
Créer une matrice temporaire à la place (inutile mais pour test) ne provoque pas d'erreur, par contre des que je veux la swapper en fin de fonction avec m_CollisionTable, là j'ai l'erreur qui reviendra.
Conclusions : Dès que je touche aux dimensions de m_CollisionTable ==> ERREUR.
Une idée ?
Partager