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

Discussion :

ASSERT failure in QList<T>::operator[]: "index out of range"

  1. #1
    Membre averti
    Homme Profil pro
    Technicien Qualification de Réseaux Optique _ ENGIE INEO
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien Qualification de Réseaux Optique _ ENGIE INEO
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut ASSERT failure in QList<T>::operator[]: "index out of range"
    Bonjour,
    alors voila, j'ai un souci dans mon programme. Le but de celui ci étant de communiquer avec un second PC via un dongle LPRS usb (émetteur/recepteur sur fréquence radio), le but étant d'envoyer au PC "client" un fichier du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     Date & heure  ;Voie1;Voie2;Voie3;Voie4;Voie5;Voie6;Voie7;Voie8;Binaires;Alti ;  Latitude  ;  Longitude  ;St;Loc
    16/04/12 15:28:15;1,985;0,976;0,093;1,741;2,155;0,000;0,000;0,000;11110000;00131;4720,06766 N;00504,01650 E;04;3
    16/04/12 15:44:36;1,985;0,976;0,099;1,736;2,149;0,000;0,000;0,000;11110000;00213;4720,06611 N;00504,03600 E;04;3
    16/04/12 16:00:36;1,985;0,976;0,085;1,747;2,173;0,000;0,000;0,000;11110000;00272;4720,08077 N;00504,03390 E;04;3
    Le souci étant que il me faut transmettre le fichier ligne par ligne, sinon le PC "client" de reçois que la moitié du fichier. Je passe donc par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    list2= textEnvoi.split("\n",QString::SkipEmptyParts);
    Pour supprimer le caractère "LF" et enregistrer les lignes dans une QStringList (list2) jusque là tout va bien.

    C'est quand je passe à la suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (port->isOpen())
        {
            if(!ui->sendEdit->toPlainText().isEmpty())
            {
     
                if(i=0,i=list2.count(),i++)
                {
                 envoi= list2[list2.count()].toStdString().c_str();
                 qDebug() << envoi;
                 port->write(envoi);
                 Sleep(1500);
                }
            }
    pour envoyer la liste il faut donc que je l'envoie ligne par ligne, et j'ai essayer pas mal de truc, mais rien ni fait..

    Une fois que l'on arrive a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    envoi= list2[list2.count()].toStdString().c_str();
    Le programme plante avec le message:


    Et le débogueur me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ASSERT failure in QList<T>::operator[]: "index out of range", file C:\Qt\Qt5.0.2\5.0.2\mingw47_32\include/QtCore/qlist.h, line 462
    Invalid parameter passed to C runtime function.
    Invalid parameter passed to C runtime function.
    Ça fait quelque jour que je suis coincé la dessus et je commence a désespérer.. Si quelqu'un peut m'aider! Merci d'avance!

    PS: Je suis sous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Qt Creator 2.7.0 
    Basé sur Qt 5.0.2 (32 bit)
     
    Compilé le Apr 9 2013 à 09:32:03
     
    Depuis la révision b6257ef735
    Et j'utilise le designer!

  2. #2
    Membre averti
    Homme Profil pro
    Technicien Qualification de Réseaux Optique _ ENGIE INEO
    Inscrit en
    Novembre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Technicien Qualification de Réseaux Optique _ ENGIE INEO
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 14
    Par défaut
    Finalement, c'est résolu avec cette méthode:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     for(i=0;i<list2.count();i++)
                {
                  port->write(list2.at(i).toLatin1()+"\n");
                  Sleep(850);
                }
    Si ça peut aider par la suite certaine personne!

  3. #3
    Rédacteur/Modérateur
    Avatar de arnolddumas
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Autriche

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

    Informations forums :
    Inscription : Novembre 2012
    Messages : 978
    Par défaut
    C'est obligé de planter. La liste list2 contient des valeurs indexées de 0 à list2.size() - 1. En faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    list2
    [list2.count()]
    tu débordes forcément des index valides.

    Avec ta nouvelle boucle, tu t'arrêtes bien à list2.size() - 1 donc tout fonctionne correctement.

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

Discussions similaires

  1. ASSERT failure in QList<T>::operator[]
    Par Avatar36 dans le forum Qt
    Réponses: 9
    Dernier message: 03/03/2015, 22h31
  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