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. program crashes after assigning values to array elements
Forum Updated to NodeBB v4.3 + New Features

program crashes after assigning values to array elements

Scheduled Pinned Locked Moved Solved General and Desktop
32 Posts 4 Posters 5.4k 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
    rezaMSLM
    wrote on last edited by
    #1

    I have a class with name setaddress containing a structure that contains a 2D array:

    int WaterMeterIDs[20][2];
    
    namespace Ui {
    class SetAddress;
    }
    
    class SetAddress : public QDialog
    {
        Q_OBJECT
    
    public:
        struct AddressList{
            int WaterMeterIDs[20][2];//the array
        };
        explicit SetAddress(QWidget *parent = 0);
        ~SetAddress();
        etc...
    private:
        Ui::SetAddress *ui;
        AddressList m_address;
    

    I want to save my data placed in qtablewidget cells to the array using these commands.
    .cpp file:

    void SetAddress::on_pushButton_apply_clicked()
    {
        int rowscount = ui->tableWidget->rowCount();
    //rowscount is always less than 20
        for(int j = 0; j < 2; j++){
            for(int i = 0; i < rowscount; i++){
                if(ui->tableWidget->item(i,j) != 0x0 ){//if cell is not empty
                     m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();//convert data to int and put it in array
                     qDebug()<<m_address.WaterMeterIDs[i][j];
                }
            }
        }
    }
    

    when I click on apply button the program works good(I can see array elements using qDebug()). but after I pressed the apply button if I press any other key even the close button(or even if I want to resize the window) program crashes!

    jsulmJ 1 Reply Last reply
    0
    • R rezaMSLM

      I have a class with name setaddress containing a structure that contains a 2D array:

      int WaterMeterIDs[20][2];
      
      namespace Ui {
      class SetAddress;
      }
      
      class SetAddress : public QDialog
      {
          Q_OBJECT
      
      public:
          struct AddressList{
              int WaterMeterIDs[20][2];//the array
          };
          explicit SetAddress(QWidget *parent = 0);
          ~SetAddress();
          etc...
      private:
          Ui::SetAddress *ui;
          AddressList m_address;
      

      I want to save my data placed in qtablewidget cells to the array using these commands.
      .cpp file:

      void SetAddress::on_pushButton_apply_clicked()
      {
          int rowscount = ui->tableWidget->rowCount();
      //rowscount is always less than 20
          for(int j = 0; j < 2; j++){
              for(int i = 0; i < rowscount; i++){
                  if(ui->tableWidget->item(i,j) != 0x0 ){//if cell is not empty
                       m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();//convert data to int and put it in array
                       qDebug()<<m_address.WaterMeterIDs[i][j];
                  }
              }
          }
      }
      

      when I click on apply button the program works good(I can see array elements using qDebug()). but after I pressed the apply button if I press any other key even the close button(or even if I want to resize the window) program crashes!

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

      @rezaMSLM Please post the stack trace after crash.
      Also, you do not check whether rowscount is bigger than 20!

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

      R 1 Reply Last reply
      3
      • jsulmJ jsulm

        @rezaMSLM Please post the stack trace after crash.
        Also, you do not check whether rowscount is bigger than 20!

        R Offline
        R Offline
        rezaMSLM
        wrote on last edited by
        #3

        @jsulm one note:
        it doesn't crash in debug mode
        only in release mode crashes!

        jsulmJ 1 Reply Last reply
        0
        • R rezaMSLM

          @jsulm one note:
          it doesn't crash in debug mode
          only in release mode crashes!

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

          @rezaMSLM said in program crashes after assigning values to array elements:

          it doesn't crash in debug mode
          only in release mode crashes!

          Strong sign for something wrong in your code.
          You probably overwrite some memory.
          Did you check that rowscount is <= 20?

          Is there a reason why you have AddressList struct and why it is in public section?

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

          R 1 Reply Last reply
          0
          • jsulmJ jsulm

            @rezaMSLM said in program crashes after assigning values to array elements:

            it doesn't crash in debug mode
            only in release mode crashes!

            Strong sign for something wrong in your code.
            You probably overwrite some memory.
            Did you check that rowscount is <= 20?

            Is there a reason why you have AddressList struct and why it is in public section?

            R Offline
            R Offline
            rezaMSLM
            wrote on last edited by rezaMSLM
            #5

            @jsulm

            if((ui->tableWidget->item(i,j) != 0x0) && (rowscount <= 20)){/*if cell is not empty && rowscount <= 20*/
            

            I added rowscount check to the code
            problem exists

            @jsulm said in program crashes after assigning values to array elements:

            Is there a reason why you have AddressList struct and why it is in public section?

            no there is not special reason. is it unusual?

            J.HilkJ jsulmJ 2 Replies Last reply
            0
            • R rezaMSLM

              @jsulm

              if((ui->tableWidget->item(i,j) != 0x0) && (rowscount <= 20)){/*if cell is not empty && rowscount <= 20*/
              

              I added rowscount check to the code
              problem exists

              @jsulm said in program crashes after assigning values to array elements:

              Is there a reason why you have AddressList struct and why it is in public section?

              no there is not special reason. is it unusual?

              J.HilkJ Offline
              J.HilkJ Offline
              J.Hilk
              Moderators
              wrote on last edited by
              #6

              @rezaMSLM said in program crashes after assigning values to array elements:

              if((ui->tableWidget->item(i,j) != 0x0) && (rowscount <= 20)){/if cell is not empty && rowscount <= 20/

              that is wrong, your array goes from 0 - 19, 20 is an invalid access


              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


              Q: What's that?
              A: It's blue light.
              Q: What does it do?
              A: It turns blue.

              1 Reply Last reply
              2
              • R rezaMSLM

                @jsulm

                if((ui->tableWidget->item(i,j) != 0x0) && (rowscount <= 20)){/*if cell is not empty && rowscount <= 20*/
                

                I added rowscount check to the code
                problem exists

                @jsulm said in program crashes after assigning values to array elements:

                Is there a reason why you have AddressList struct and why it is in public section?

                no there is not special reason. is it unusual?

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

                @rezaMSLM said in program crashes after assigning values to array elements:

                no there is not special reason. is it unusual?

                I just don't see the point to have a struct containing an array and nothing else.
                And everything not needed outside the class should be inside private section (information hiding).
                Why not just declare

                private:
                int m_address[20][2];
                

                ?
                Back to the crash: what is it? Is it SIGSEGV? Or something else?

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

                R 1 Reply Last reply
                1
                • jsulmJ jsulm

                  @rezaMSLM said in program crashes after assigning values to array elements:

                  no there is not special reason. is it unusual?

                  I just don't see the point to have a struct containing an array and nothing else.
                  And everything not needed outside the class should be inside private section (information hiding).
                  Why not just declare

                  private:
                  int m_address[20][2];
                  

                  ?
                  Back to the crash: what is it? Is it SIGSEGV? Or something else?

                  R Offline
                  R Offline
                  rezaMSLM
                  wrote on last edited by
                  #8

                  @jsulm

                  @jsulm said in program crashes after assigning values to array elements:

                  I just don't see the point to have a struct containing an array and nothing else.

                  I'm planning to put and use some variables to the structure after solving this issue.

                  @jsulm said in program crashes after assigning values to array elements:

                  what is it? Is it SIGSEGV? Or something else?

                  how to know that?

                  jsulmJ 1 Reply Last reply
                  0
                  • R rezaMSLM

                    @jsulm

                    @jsulm said in program crashes after assigning values to array elements:

                    I just don't see the point to have a struct containing an array and nothing else.

                    I'm planning to put and use some variables to the structure after solving this issue.

                    @jsulm said in program crashes after assigning values to array elements:

                    what is it? Is it SIGSEGV? Or something else?

                    how to know that?

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

                    @rezaMSLM Start your app and when it crashes see what is printed in the console.

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

                    R 1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @rezaMSLM Start your app and when it crashes see what is printed in the console.

                      R Offline
                      R Offline
                      rezaMSLM
                      wrote on last edited by
                      #10

                      @jsulm

                      The program has unexpectedly finished.
                      The process was ended forcefully.
                      D:/Projects/Qt_ProjectFolder/build-Meter_Config-Desktop_Qt_5_9_6_MinGW_32bit-Release/release/Meter_Config.exe crashed.
                      
                      jsulmJ 1 Reply Last reply
                      0
                      • R rezaMSLM

                        @jsulm

                        The program has unexpectedly finished.
                        The process was ended forcefully.
                        D:/Projects/Qt_ProjectFolder/build-Meter_Config-Desktop_Qt_5_9_6_MinGW_32bit-Release/release/Meter_Config.exe crashed.
                        
                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #11

                        @rezaMSLM Did you see what @J-Hilk wrote?

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

                        R 1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @rezaMSLM Did you see what @J-Hilk wrote?

                          R Offline
                          R Offline
                          rezaMSLM
                          wrote on last edited by rezaMSLM
                          #12

                          @jsulm said in program crashes after assigning values to array elements:

                          @rezaMSLM Did you see what @J-Hilk wrote?

                          yes
                          if rowscount = 20 in for loop i have:

                           for(int i = 0; i < count; i++){
                          

                          meaning that maximum i = 19

                          although that is for safe side.
                          the number of rows in my tests is less than 10

                          jsulmJ 1 Reply Last reply
                          0
                          • R rezaMSLM

                            @jsulm said in program crashes after assigning values to array elements:

                            @rezaMSLM Did you see what @J-Hilk wrote?

                            yes
                            if rowscount = 20 in for loop i have:

                             for(int i = 0; i < count; i++){
                            

                            meaning that maximum i = 19

                            although that is for safe side.
                            the number of rows in my tests is less than 10

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

                            @rezaMSLM To be sure: if on_pushButton_apply_clicked() is not executed there is no crash?
                            If so what happens if you comment out

                            m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();
                            

                            ?
                            And do you use m_address.WaterMeterIDs somewhere else?

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

                            R 1 Reply Last reply
                            0
                            • Maaz MominM Offline
                              Maaz MominM Offline
                              Maaz Momin
                              wrote on last edited by
                              #14

                              @rezaMSLM Do you have any pointer or member variable that doesn't have a default value. It doesn't crash in "Debug" mode because Debug mode initializes a few things and release mode doesn't. Hope this helps you in figuring out what is wrong :)

                              R 1 Reply Last reply
                              0
                              • jsulmJ jsulm

                                @rezaMSLM To be sure: if on_pushButton_apply_clicked() is not executed there is no crash?
                                If so what happens if you comment out

                                m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();
                                

                                ?
                                And do you use m_address.WaterMeterIDs somewhere else?

                                R Offline
                                R Offline
                                rezaMSLM
                                wrote on last edited by
                                #15

                                @jsulm said in program crashes after assigning values to array elements:

                                what happens if you comment out
                                m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                if comment this, will not crash

                                @jsulm said in program crashes after assigning values to array elements:

                                And do you use m_address.WaterMeterIDs somewhere else?

                                no

                                jsulmJ Maaz MominM 2 Replies Last reply
                                0
                                • R rezaMSLM

                                  @jsulm said in program crashes after assigning values to array elements:

                                  what happens if you comment out
                                  m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                  if comment this, will not crash

                                  @jsulm said in program crashes after assigning values to array elements:

                                  And do you use m_address.WaterMeterIDs somewhere else?

                                  no

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

                                  @rezaMSLM Well, then the only idea I have is that you're writing outside of the array boundaries.

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

                                  1 Reply Last reply
                                  0
                                  • R rezaMSLM

                                    @jsulm said in program crashes after assigning values to array elements:

                                    what happens if you comment out
                                    m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                    if comment this, will not crash

                                    @jsulm said in program crashes after assigning values to array elements:

                                    And do you use m_address.WaterMeterIDs somewhere else?

                                    no

                                    Maaz MominM Offline
                                    Maaz MominM Offline
                                    Maaz Momin
                                    wrote on last edited by
                                    #17

                                    @rezaMSLM can you add another qDebug before m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                    qDebug() << i << j;

                                    R 1 Reply Last reply
                                    0
                                    • Maaz MominM Maaz Momin

                                      @rezaMSLM Do you have any pointer or member variable that doesn't have a default value. It doesn't crash in "Debug" mode because Debug mode initializes a few things and release mode doesn't. Hope this helps you in figuring out what is wrong :)

                                      R Offline
                                      R Offline
                                      rezaMSLM
                                      wrote on last edited by
                                      #18

                                      @Maaz-Momin said in program crashes after assigning values to array elements:

                                      Do you have any pointer or member variable that doesn't have a default value

                                      only WaterMeterIDs[20][2] has not initial value

                                      1 Reply Last reply
                                      0
                                      • Maaz MominM Maaz Momin

                                        @rezaMSLM can you add another qDebug before m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                        qDebug() << i << j;

                                        R Offline
                                        R Offline
                                        rezaMSLM
                                        wrote on last edited by
                                        #19

                                        @Maaz-Momin said in program crashes after assigning values to array elements:

                                        @rezaMSLM can you add another qDebug before m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                        qDebug() << i << j;

                                        added it.
                                        the log is correct
                                        and then crashes with one click anywhere

                                        J.HilkJ 1 Reply Last reply
                                        0
                                        • R rezaMSLM

                                          @Maaz-Momin said in program crashes after assigning values to array elements:

                                          @rezaMSLM can you add another qDebug before m_address.WaterMeterIDs[i][j] = ui->tableWidget->item(i,j)->text().toInt();

                                          qDebug() << i << j;

                                          added it.
                                          the log is correct
                                          and then crashes with one click anywhere

                                          J.HilkJ Offline
                                          J.HilkJ Offline
                                          J.Hilk
                                          Moderators
                                          wrote on last edited by
                                          #20

                                          @rezaMSLM can you make a minimal compileable example, so that we could test it?


                                          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                                          Q: What's that?
                                          A: It's blue light.
                                          Q: What does it do?
                                          A: It turns blue.

                                          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