Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. ASSERT failure in QList<T>::at: "index out of range"
QtWS25 Last Chance

ASSERT failure in QList<T>::at: "index out of range"

Scheduled Pinned Locked Moved Solved General and Desktop
qlistqstringlistc++qurlqt 5.7
24 Posts 4 Posters 25.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #2

    Hi,

    Did you check that you call doDownload with an non-empty QStringList ?

    Also, why use QVariant if you will only handle string list in that method ?

    On a side note, you have a memory leak, each time that function is called you create a new QNetworkAccessManager but never delete it. All instances will get destroyed when their parent also is but in between they will slowly fill your memory.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • QjayQ Offline
      QjayQ Offline
      Qjay
      wrote on last edited by
      #3

      Yes i did checked that the doen_links (string list) is not empty.

      I did qDebug() << down_links.size();

      To check the size of the list.

      For instance in the givrn screenshot the page that i tried to download had 33 links

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #4

        Did you also check the value of current ?

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        QjayQ 1 Reply Last reply
        2
        • Paul ColbyP Offline
          Paul ColbyP Offline
          Paul Colby
          wrote on last edited by
          #5

          Hi @Qjay

          Where do you initialise dbmanager::current? And, are you re-using the dbmanager instance?

          eg:

          d->doDownload(one_set_of_down_links);
          // later
          d->doDownload(another_set_of_down_links);
          

          In which case you might need to be explicitly resetting dbmanager::current to 0? (and if the second list was smaller than the first, you will get the exception you've shown)

          Cheers.

          1 Reply Last reply
          3
          • QjayQ Offline
            QjayQ Offline
            Qjay
            wrote on last edited by
            #6

            hi @Paul like in my case

             dbmanager *d = new dbmanager(0) ;
                d->doDownload(down_links);
            
                dbmanager *p = new dbmanager(0) ;
                p->png_download(png_down_links, png_hash);
            

            i use
            int current= 0 // for doDownload(down_links)
            png_curr = 0; // for png_download

            here is the whole code of the .cpp file

            https://ghostbin.com/paste/rdfnb

            1 Reply Last reply
            0
            • SGaistS SGaist

              Did you also check the value of current ?

              QjayQ Offline
              QjayQ Offline
              Qjay
              wrote on last edited by
              #7

              @SGaist

              Yes i check the value of current .

              it is in global scope and i have initialized it to 0

              int current = 0 ;

              i have attached the full source code too

              https://ghostbin.com/paste/rdfnb

              and this is how i am calling the add function which calls save image and save file function

                 Item{
                              visible: false
                              Text{
                                  visible: false
                                  id: responsetext
                                  text:""
                              }
                          }
              
                          Button{
                              width: drawer.width
                              height: 40
              
                              text:"save offline"
                              onClicked: {
                                  responsetext.text = dbman.add(current_title);
                                  drawer.close();
              
                              }
                          }
              
              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #8

                Why a global variable ?

                If you have an out of range error this means that current goes higher than the size of the list your are accessing.

                You are likely never reinitializing current. So it will work the first time however the second time, and unless your array gets bigger than current, it will fail.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • Paul ColbyP Offline
                  Paul ColbyP Offline
                  Paul Colby
                  wrote on last edited by
                  #9

                  @Qjay, how sure are you that the exception happens at this line?

                  QUrl url = v.toStringList().at(current);
                  

                  Did the debugger break at this line?

                  The reasons I ask are,

                  1. the output in your animated gif suggests (its not definitive) to me that the crash happens just after that point;
                  2. its looks very likely to me, that the exception would be on this line:
                  png_filename = n.toStringList().at(png_curr);
                  

                  Because the code in dbmanager::png_download is assuming that n (aka png_hash) always has the same number (or rather, at least as many) items as v (aka png_down_links). But, while I see code that streams entries into png_down_links (in save_images), I see no code anywhere that adds anything to png_hash.

                  I highly recommend you try out the debugger (if you haven't already), and also add some range-checking / debug logging in the dbmanager::png_download function.

                  Cheers.

                  1 Reply Last reply
                  1
                  • QjayQ Offline
                    QjayQ Offline
                    Qjay
                    wrote on last edited by Qjay
                    #10

                    @Paul i think you are right . I think my code is messed up ( this code is an older version ) . Yeah i just saw png_hash has nothing to do in whole code !!

                    I have updated the code

                    https://ghostbin.com/paste/j4meh

                    1 Reply Last reply
                    0
                    • QjayQ Offline
                      QjayQ Offline
                      Qjay
                      wrote on last edited by
                      #11

                      @Paul @SGaist , i don't know why but i am never able to initialize QUrl url :( ;

                      AND I BELIEVE THAT"S WHAT CAUSING THE PROBLEM

                      i have tried different approaches too . Like in my code i was using QStringList i even tried Qvector<QString> down_links and end result was same

                      NOT ABLE TO set QUrl

                      in console screen
                      QUrl("")
                      ""
                      

                      What shoudl i do ?

                      jsulmJ 1 Reply Last reply
                      0
                      • QjayQ Qjay

                        @Paul @SGaist , i don't know why but i am never able to initialize QUrl url :( ;

                        AND I BELIEVE THAT"S WHAT CAUSING THE PROBLEM

                        i have tried different approaches too . Like in my code i was using QStringList i even tried Qvector<QString> down_links and end result was same

                        NOT ABLE TO set QUrl

                        in console screen
                        QUrl("")
                        ""
                        

                        What shoudl i do ?

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        @Qjay Can you show the code where you initialize QUrl? From your description we can only guess what could be the problem. Are you sure you don't pass an empty string to QUrl?

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0
                        • QjayQ Offline
                          QjayQ Offline
                          Qjay
                          wrote on last edited by
                          #13

                          @jsulm , i have given the whole code

                          https://ghostbin.com/paste/v4t47

                          by the way this is where i set QUrl

                          line no 371

                           QUrl url = v.toStringList().at(current);
                                  qDebug() << "why break" << url;
                          
                          1 Reply Last reply
                          0
                          • SGaistS Offline
                            SGaistS Offline
                            SGaist
                            Lifetime Qt Champion
                            wrote on last edited by
                            #14

                            Again, did you check that the value of current is lower than the size of the string list ?

                            Interested in AI ? www.idiap.ch
                            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                            1 Reply Last reply
                            0
                            • QjayQ Offline
                              QjayQ Offline
                              Qjay
                              wrote on last edited by
                              #15

                              I have initialized current =0; in global scope .

                              jsulmJ 1 Reply Last reply
                              0
                              • QjayQ Qjay

                                I have initialized current =0; in global scope .

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #16

                                @Qjay But is it changed somewhere?
                                Why not just check like this?

                                qDebug() << v.toStringList().size() << current;
                                qDebug() << v.toStringList().at(current);
                                QUrl url = v.toStringList().at(current);
                                

                                In such a situation this is actually the first thing to do...

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                1 Reply Last reply
                                1
                                • QjayQ Offline
                                  QjayQ Offline
                                  Qjay
                                  wrote on last edited by
                                  #17

                                  hey @jsulm

                                  i tried what you suggested

                                  qDebug() << v.toStringList().size() << current;
                                  qDebug() << v.toStringList().at(current);
                                  QUrl url = v.toStringList().at(current);
                                  

                                  i did this

                                  qDebug() << "stringlist size and current" << v.toStringList().size() << current;
                                          qDebug() << "current url in stringlist" << v.toStringList().at(current);
                                          QUrl url = v.toStringList().at(current);
                                          qDebug() << "why break" << url;
                                  

                                  output

                                  stringlist size and current 33 0
                                  current url in stringlist   "(http://restbase.wikitolearn.org/en.wikitolearn.org/v1/media/math/render/svg/3cd95482da53d42c5f7f249454f7ee1e85cacc0c)"
                                  why break QUrl("")
                                  ""
                                  

                                  and then error

                                  ASSERT failure in QList<T>::at: "index out of range", file ../../Qt5.7.0/5.7/gcc_64/include/QtCore/qlist.h, line 537
                                  The program has unexpectedly finished.
                                  
                                  jsulmJ 1 Reply Last reply
                                  0
                                  • QjayQ Qjay

                                    hey @jsulm

                                    i tried what you suggested

                                    qDebug() << v.toStringList().size() << current;
                                    qDebug() << v.toStringList().at(current);
                                    QUrl url = v.toStringList().at(current);
                                    

                                    i did this

                                    qDebug() << "stringlist size and current" << v.toStringList().size() << current;
                                            qDebug() << "current url in stringlist" << v.toStringList().at(current);
                                            QUrl url = v.toStringList().at(current);
                                            qDebug() << "why break" << url;
                                    

                                    output

                                    stringlist size and current 33 0
                                    current url in stringlist   "(http://restbase.wikitolearn.org/en.wikitolearn.org/v1/media/math/render/svg/3cd95482da53d42c5f7f249454f7ee1e85cacc0c)"
                                    why break QUrl("")
                                    ""
                                    

                                    and then error

                                    ASSERT failure in QList<T>::at: "index out of range", file ../../Qt5.7.0/5.7/gcc_64/include/QtCore/qlist.h, line 537
                                    The program has unexpectedly finished.
                                    
                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #18

                                    @Qjay Why is the URL in parentheses?

                                    (http://restbase.wikitolearn.org/en.wikitolearn.org/v1/media/math/render/svg/3cd95482da53d42c5f7f249454f7ee1e85cacc0c)
                                    

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    1 Reply Last reply
                                    0
                                    • SGaistS Offline
                                      SGaistS Offline
                                      SGaist
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #19

                                      Looks like you are doing a lot of parsing, replacement etc.

                                      The first thing I'd do, is to just ensure that you really have URLs in your list. And get rid of that QVariant parameter. It really doesn't make any sense in your use case.

                                      Interested in AI ? www.idiap.ch
                                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      0
                                      • QjayQ Offline
                                        QjayQ Offline
                                        Qjay
                                        wrote on last edited by Qjay
                                        #20

                                        Hello , thanks for the suggetions .

                                        1. yes there were useless ( ) in url . i have removed them . Now i am able to assign url to Qurl :D great!!

                                        2. i removed the Qvariant thing too

                                        now the code is

                                        .cpp : https://ghostbin.com/paste/vv2w7

                                        header file : https://ghostbin.com/paste/8z4y3

                                        but the assert error still exist :/

                                        1 Reply Last reply
                                        0
                                        • SGaistS Offline
                                          SGaistS Offline
                                          SGaist
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #21

                                          Still at the same place ?

                                          Interested in AI ? www.idiap.ch
                                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved