IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Problème redimensionnement vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Par défaut Problème redimensionnement vector
    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 ?

  2. #2
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Par défaut
    C'est bon, j'ai trouvé, mon objet CSprite n'était pas déclaré dans le tas mais en variable globale, ce qui pose beaucoup de problèmes.

  3. #3
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    j'ai peut etre une idée mais je suis pas sure, la class vector<bool> est une specialisation de la classe vector qui n'utilise pas les template, et ceci pour une raison simple, le vector<bool> a ete optimise pour n'utiliser qu'un bit par valeures dans le vector. D'apres mon livre sur la STL ils disent aussi que pour cette raison vector<bool> est moins performant.

    Donc essaye de voir si utiliser des unsigned char a la place du bool ne resoud pas ton probleme, comme tu utilises un vector de vector il y a peut etre un probleme entre l'operateur templater et le non-templater du vector<bool>.

    en esperant que ca va t'aider.

    XXiemeciel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de vector
    Par Sachiel31 dans le forum SL & STL
    Réponses: 82
    Dernier message: 11/07/2006, 09h44
  2. [Debutant][Vector]Petit problème de vector
    Par GyZmoO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/05/2006, 10h39
  3. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25
  4. Problème de vector
    Par jamesleouf dans le forum SL & STL
    Réponses: 13
    Dernier message: 22/03/2006, 22h36
  5. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo