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

Qt Discussion :

ASSERT failure in QList<T>::operator[]


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut ASSERT failure in QList<T>::operator[]
    Bonjour,

    J'obtiens l'erreur suivante: ASSERT failure in QList<T>::operator[]: "index out of range"
    Voila le code qui vient avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        QList< QList<int > > distance;
        int i, j, cost;
     
        for (i=0; i<string1.size();i++){
            distance[i][0] = i;
        }
    Pourtant je ne vois rien de choquant. Le programme plante à la ligne distance[i][0] = i pour i=0. Qu'est-ce qui se passe?

    Merci de votre aide.

    Cordialement

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 402
    Par défaut
    Pourtant, l'heure est assez explicite. Qu'est ce que tu ne comprends pas dans "out of range" ?
    Quelle est la taille de tes listes ? Est ce que tu accèdes à un élément existant ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    Ce que j'ai mis c'est le tout début de mon code. Il n'y a rien avant. J'ai compris ce que signifie "out of range". Ce que je ne comprends pas c'est que j'ai cette erreur alors que i vaut 0 :/
    La liste est créée à la ligne QList< QList<int > > distance; donc non, je n'accède pas à un élément existant.
    Les listes font une taille de 5.

    EDIT: J'ai essayé de copier ce bout de code dans un projet vierge => même bug

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 402
    Par défaut
    Citation Envoyé par Avatar36 Voir le message
    La liste est créée à la ligne QList< QList<int > > distance; donc non, je n'accède pas à un élément existant.
    Les listes font une taille de 5.
    A quel moment tu donnes une taille de 5 a ta liste dans ton code ? (HS : tu ne viendrais pas d'un autre langage, dans lequel les listes se dimensionnent automatiquement ? Ce n'est pas le cas en C++)

    Si tu accèdes à un élément qui n'existe pas, c'est normal d'avoir une erreur

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 218
    Par défaut
    C'est ce que je m'étais dit aussi mais dans la doc de la classe QList, ils n'indiquent à aucun moment la taille de ce QList. (HS: et faisant beaucoup de VBA en ce moment j'avoue que ça ne m'a pas choqué. Damn reflexes) Du coup je suis censé indiquer la taille des QList à quel endroit?

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    402
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 402
    Par défaut
    Tu peux connaître la taille d'un conteneur en utilisant size(). Et une bonne pratique est de toujours tester la taille d'un conteneur avant d'utiliser [] (ce n'est pas spécifique à Qt, c'est valable aussi pour tous les conteneurs du C++)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // version Qt
    Q_ASSERT(list.size() >= i) // ou assert
    list[i]
    Pour la taille de la liste :
    • sois tu définies une taille par défaut dans le constructeur
    • sois tu redimenssionnes avec resize()
    • sois tu utilies une fonction qui adapte la taille (push_back, append, insert, etc)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2013, 15h20
  2. ASSERT failure in QVector<T>::operator
    Par Invité dans le forum Qt
    Réponses: 1
    Dernier message: 09/01/2010, 01h03
  3. debug assertion failure
    Par anslab dans le forum C++
    Réponses: 5
    Dernier message: 22/05/2007, 16h33
  4. Kernel-error "kernel: Assertion failure sous RedHat
    Par peppena dans le forum Administration système
    Réponses: 1
    Dernier message: 08/03/2006, 13h30

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