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 QVector<T>::operator[]: "index out of range", file ...
QtWS25 Last Chance

ASSERT failure in QVector<T>::operator[]: "index out of range", file ...

Scheduled Pinned Locked Moved General and Desktop
6 Posts 4 Posters 20.0k 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.
  • R Offline
    R Offline
    rahmanig
    wrote on last edited by
    #1

    Hi everyone

    I am relatively new to Qt, and working on game of life. Can someone please help me overcome this error.

    ASSERT failure in QVector<T>::operator[]: "index out of range", file ..............\Qt\Qt5.0.1\5.0.1\mingw47_32\include/QtCore/qvector.h, line 356

    Here is the code:

    dialog.h:

    @#ifndef DIALOG_H
    #define DIALOG_H

    #include <QDialog>
    #include<QtCore>
    #include<QtGui>
    #include <QGraphicsScene>
    #include <QGraphicsRectItem>
    #include"mycell.h"
    #include "QTimer"
    #include "QVector"

    namespace Ui {
    class Dialog;
    }

    class Dialog : public QDialog
    {
    Q_OBJECT

    public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();
    int gridSize, saveIndex;
    bool timeState;

     QVector<QVector<bool> > tempGrid;
    

    private slots:
    void on_pushButton_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_3_clicked();
    void on_pushButton_4_clicked();
    void on_comboBox_activated(int index);
    void update_grid();

    void on_pushButton_5_clicked();
    
    void on_comboBox_2_activated(int index);
    
    void on_comboBox_3_activated(int index);
    

    private:
    Ui::Dialog *ui;
    QGraphicsScene *scene;
    // myCell cellArray[100][100];
    QVector<QVector<myCell
    > > vect;

    // myCell *cell;
    QTimer *timer;
    };

    #endif // DIALOG_H

    ==========================================================================================
    dialog.cpp

    ==============================================================================================

    #include "dialog.h"
    #include "ui_dialog.h"
    #include"mycell.h"
    #include "QTimer"
    #include "thread.h"

    Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
    {

    ui->setupUi(this);
    //tempGrid [gridSize][gridSize];
    scene = new QGraphicsScene(this);
    ui->graphicsView->setScene(scene);
    //Dialog.resize(scene->itemsBoundingRect().size());
    
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(on_pushButton_2_clicked()));
    
    saveIndex = 0;
    

    }

    Dialog::~Dialog()
    {
    delete ui;
    }

    void Dialog::on_pushButton_clicked() // Display button
    {

    scene->clear();
    
    timeState = true;
    ui->label->setText(ui->lineEdit->text());
    int x, y= 0;
    gridSize= 20;
    gridSize = ui->label->text().toInt();
    ui->graphicsView->resize((gridSize*10)+3,(gridSize*10)+3);
            //ui->lineEdit->setText(QString::number(gridSize));
    
    
    for (int i= 0; i<gridSize; i++){
        for(int j=0;j<gridSize;j++){
            vect[i][j]= new myCell(i*10,j*10,10);
            scene->addItem(vect[i][j]);
            //Dialog.resize(scene->addItem(vect[i][j]));
           // ui->graphicsView->setSizeIncrement(y,y);
            x+=10;
        }
        x= -100;
        y+=10;
    }
    ui->pushButton->setEnabled(true);
    ui->pushButton_2->setEnabled(true);
    ui->pushButton_3->setEnabled(true);
    

    // ui->pushButton_4->setEnabled(true);
    ui->comboBox->setEnabled(true);
    ui->pushButton_5->setEnabled(false);
    ui->comboBox_3->setEditable(true);
    ui->comboBox_2->setEnabled(true);
    on_pushButton_4_clicked();

    }

    void Dialog::on_pushButton_2_clicked() //step button
    {

    int getNeighbours = 0;
    
    for (int a=0;a<vect.size();a++)
    {
        for (int b=0;b<vect.size();b++)
        {
            tempGrid[a][b] = vect[a][b]->state;
        }
    }
    for (int x=1;x<vect.size()-1;x++)
    {
        for (int y=1;y<vect.size()-1;y++)
        {
            getNeighbours = 0;
            vect[x][y-1]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x+1][y]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x][y+1]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x-1][y]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x+1][y-1]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x+1][y+1]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x-1][y+1]->state ? getNeighbours +=1:getNeighbours +=0;
    
            vect[x-1][y-1]->state ? getNeighbours +=1:getNeighbours +=0;
            
            tempGrid[x][y]= vect[x][y]->state == true && getNeighbours < 2 ?
                        false: true;
    
    
             if (vect[x][y]->state == true && getNeighbours <=3)
            {
                tempGrid[x][y] = true;
            }
            else if (vect[x][y]->state == true && getNeighbours > 3)
            {
                tempGrid[x][y] = false;
            }
            else if (vect[x][y]->state == false && getNeighbours == 3)
            {
                tempGrid[x][y] = true;
            }
    
        }
    }
    for (int a=0;a<vect.size();a++)
        for (int b=0;b<vect.size();b++)
        {
            vect[a][b]->state = tempGrid[a][b];
            vect[a][b]->update();
        }
    

    }

    void Dialog::on_pushButton_3_clicked() // Auto Step button
    {
    timer->start(100);
    // ui->pushButton_2->setEnabled(false);
    ui->comboBox_3->setEnabled(false);
    ui->comboBox->setEnabled(false);
    ui->lineEdit->setEnabled(false);
    ui->pushButton->setEnabled(false);
    ui->pushButton_5->setEnabled(false);
    ui->comboBox_2->setEnabled(false);
    ui->pushButton_4->setEnabled(true);

    }

    void Dialog::on_pushButton_4_clicked() //Pause button
    {
    timer->stop();
    ui->pushButton_2->setEnabled(true);
    ui->comboBox->setEnabled(true);
    ui->lineEdit->setEnabled(true);
    ui->pushButton->setEnabled(true);
    ui->pushButton_5->setEnabled(true);
    ui->comboBox_3->setEnabled(true);
    ui->comboBox_2->setEnabled(true);
    }

    void Dialog::update_grid()
    {
    for (int a=0;a<gridSize;a++)
    for (int b=0;b<gridSize;b++)
    vect[a][b]->update();
    }@

    I hope that does not confuse u too much. I don't know what am I doing wrong!!@@@@

    Thanks in advance

    1 Reply Last reply
    0
    • raven-worxR Offline
      raven-worxR Offline
      raven-worx
      Moderators
      wrote on last edited by
      #2

      @QVector<QVector<myCell*> > vect; //empty vector @
      You need to use "QVector::resize()":http://qt-project.org/doc/qt-4.8/qvector.html#resize to get around the assertion at least.

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      1 Reply Last reply
      0
      • G Offline
        G Offline
        giesbert
        wrote on last edited by
        #3

        If you have a vector of cells (QVector<myCell>) you have to add the myCell objects. If you have a vector of pointers, you have to add the pointers. A resize is not enough.

        Nokia Certified Qt Specialist.
        Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

        1 Reply Last reply
        0
        • R Offline
          R Offline
          rahmanig
          wrote on last edited by
          #4

          unfortunately I cant get my head around those :/ can you be more clear. Thx.

          1 Reply Last reply
          0
          • R Offline
            R Offline
            rahmanig
            wrote on last edited by
            #5

            I realized that the vector is empty and that might be the reason but as soon as do this:

            @QVector<QVector<myCell*> > vect[200][200];@

            I get bunch of errors.

            1 Reply Last reply
            0
            • JohanSoloJ Offline
              JohanSoloJ Offline
              JohanSolo
              wrote on last edited by JohanSolo
              #6

              You're trying to declare an array of QVector< QVector< myCell* > > with the given syntax... i.e. 40000 instances of QVector< QVector< myCell* > >.

              Maybe try to get a look at this first

              `They did not know it was impossible, so they did it.'
              -- Mark Twain

              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