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 :

Vector bool, bidimensionnel


Sujet :

SL & STL C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 38
    Points
    38
    Par défaut Vector bool, bidimensionnel
    Bonjour, j'ai un problème avec le code suivant et je n'arrive pas à comprendre pourquoi j'ai une telle erreur :

    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
    // Test dans les deux collision tables
     
    	bool mytest1 = false;
    	bool mytest2 = false;
     
    	for( int i = 0; i < (rect_Bottom - rect_Top); i++ )
    	{
    		for( int j = 0; j < (rect_Right - rect_Left); j++ )
    		{
    			mytest1 = FirstSprite->GetCollisionTable()[rect_Top - TOP1 + i][rect_Left - LEFT1 + j];
    			mytest2 = SecondSprite->GetCollisionTable()[rect_Top - TOP2 + i][rect_Left - LEFT2 + j];
    			if( ( mytest1 & mytest2 ) == true )
    				return COL_DETECTED;
    		}
    	}
    GetCollisionTable() est une référence à un vector<vector<bool>> :
    typedef std::vector<bool> TBoolArray;
    typedef std::vector<TBoolArray> TBoolMatrix;

    Le test sur la CollisionTable du FirstSprite marche bien, mais la ligne d'en dessous, la collision table du SecondSprite, fait planter le programme en me renvoyant une erreur, lorsque le résultat est true uniquement. J'ai vérifié, il n'y a pas de débordement.
    L'erreur concerne donc vector.

    Je crois que ce n'est pas la bonne méthode pour vérifier ces matrix, si ?

  2. #2
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Quelle est le message de l'erreur?

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    Voilà l'erreur :


  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ca ressemble quand même fortement à un dépassement de capacité, vu l'assertion qui a echoué...

    Et puis lorsque ce message s'affiche, il te suffit de cliquer sur "recommencer" pour debugger ton appli et voir tout de suite ce qui cloche.

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    hum oui, mais à part m'emmener là, ça m'avance pas beaucoup de cliquer sur recommencer : _SCL_SECURE_VALIDATE_RANGE((this->_My_actual_offset() + _Off) <= ((_MycontTy *)this->_Mycont)->_Mysize);

    Bref, j'ai débugué pas à pas et j'ai vérifié les valeurs, il n'y a pas de dépassement pourtant.
    Exemple : Accès à SecondSprite->GetCollisionTable()[0][104]
    Ma collision table : ColTable[47][105]

    Ca plante quand même.

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    hum oui, mais à part m'emmener là, ça m'avance pas beaucoup de cliquer sur recommencer : _SCL_SECURE_VALIDATE_RANGE((this->_My_actual_offset() + _Off) <= ((_MycontTy *)this->_Mycont)->_Mysize);
    Pour ça il faut utiliser la pile d'appels, pour remonter jusqu'à l'endroit de ton code qui a mené à cette ligne.

    Tu peux aussi afficher dans la fenêtre "watch" du debogueur les variables incriminées, vérifier qu'il y a effectivement un problème, et remonter les fonctions (toujours avec la pile d'appels) pour voir à quel moment la valeur incorrecte est introduite.

  7. #7
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 948
    Points : 719
    Points
    719
    Par défaut
    les valeurs de TOP2 , LEFT2...
    pour info, c'est quoi? (enfin la valeur réelle pas la signification :p)

    en gros, TOP2 > rect_Top c'est possible?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exemple : Accès à SecondSprite->GetCollisionTable()[0][104]
    Ma collision table : ColTable[47][105]
    t'es sur de tes chiffres?

    car 104 et 105 c'est tellement proche... c'est pas juste les valeurs de J?
    t'a bien pris en compte les autres var?


    dsl si ca te semble neuneu comme questions, mais la plupart des gros pb sont resoluts avec des petites questions... (enfin les miens, lol)

  8. #8
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 34
    Points : 38
    Points
    38
    Par défaut
    Vous aviez raison, mon tableau était déclaré à l'envers et j'ai totallement pas vu héhé, quel idiot je fais.
    coltable[105][47] au lieu de coltable[47][105] ! Et donc c'est vite fait de s'embrouiller. Ca m'apprendra à ne pas revérifier du code tapé quelques temps auparavant.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/11/2012, 14h37
  2. [FAQ] vector<bool>, spécialisation du standard
    Par Aladore dans le forum Contribuez
    Réponses: 3
    Dernier message: 20/08/2010, 10h50
  3. Obtenir l'adresse du contenu d'un std::vector<bool>
    Par camboui dans le forum SL & STL
    Réponses: 11
    Dernier message: 23/10/2009, 14h29
  4. Tableau bidimensionnel de Vector
    Par j0o0 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 05/05/2007, 19h51
  5. vector<bool> comme argument de fonction
    Par Krishna dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/09/2004, 08h30

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