Bonjour,

J'ai quelques problèmes à redimensionner une matrice :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
typedef std::vector<bool>        TBoolArray;
typedef std::vector<TBoolArray>  TBoolMatrix;
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 :


Donc l'application essaye d'écrire dans la mémoire à la fin de son exécution.

Voici le code donnant lieu à tout ça :

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);
}
m_CollisionTable est donc une TBoolMatrix, membre privé de la classe CSprite.

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 ?