Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. segmentation fault
Forum Updated to NodeBB v4.3 + New Features

segmentation fault

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
qt 4.8cross-compilingarmv7mqtt
61 Posts 6 Posters 24.8k Views 1 Watching
  • 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.
  • M Milav
    15 Oct 2019, 04:53

    @jsulm

    i call it in mainwindow.cpp file.

    here i have send the code snip for that portion.

    mainwindow.cpp

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        ui->send->setDisabled(true);
        ui->message->setDisabled(true);
        ui->subscribe->setDisabled(true);
        ui->topic->setDisabled(true);
    
        ui->lineIP->setText(QString("a3jkuztr3frwt4-ats.iot.ap-south-1.amazonaws.com"));
        ui->linePort->setText(QString("8883"));
    
        lib_init();
    
        connect (ui->connect, SIGNAL(clicked()), this, SLOT(connectPressed()));
        connect (ui->send, SIGNAL(clicked()), this, SLOT(sendPressed()));
        connect (ui->subscribe, SIGNAL(clicked()), this, SLOT(subscribePressed()));
    }
    
    void MainWindow::connectPressed()
    {
        QByteArray host = ui->lineIP->text().toLocal8Bit();
        QByteArray id = ui->lineID->text().toLocal8Bit();
    
        int port = 0;
        port = ui->linePort->text().toInt();
        if (!port)
        {
            ui->linePort->clear();
            return ;
        }
        ui->connect->setDisabled(true);
    
    
        mosq = new qtmosq(id, true);
        int size = sizeof(*mosq);
        qDebug() << size;
        connect (mosq, SIGNAL(connectEnable()), this, SLOT(connectEnabled()));
        connect (mosq, SIGNAL(subscribed()), this ,SLOT(subscribed()));
        connect (mosq, SIGNAL(connected()), this, SLOT(connected()));
        connect (mosq, SIGNAL(messageSent(bool)), this, SLOT(setMessageStatus(bool)));
        connect (mosq, SIGNAL(messageReceived(QString)), this, SLOT(showMessage(QString)));
        mosq->connect_async(host.data(), port);
        mosq->loop_start();
    
    }
    

    mainwindow.h

    #include <QMainWindow>
    #include "qtmosq.h"
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
    
    private:
        qtmosq* mosq;
        QStringList subed;
        QString currentTopic;
        Ui::MainWindow *ui;
    
    private slots:
        void setMessageStatus(bool);
        void connectPressed();
        void sendPressed();
        void connectEnabled();
        void subscribePressed();
        void subscribed();
        void connected();
        void showMessage(QString);
    };
    

    qtmosq.h

    #ifndef QTMOSQ_H
    #define QTMOSQ_H
    
    #include "QObject"
    #include "mosquittopp.h"
    
    using namespace mosqpp;
    
    class qtmosq : public QObject, public mosquittopp
    {
        Q_OBJECT
    
    public:
        qtmosq(const char *id = NULL, bool clean_session = true) : mosquittopp (id, clean_session) {MID = 0;}
        ~qtmosq() {}
    
        void on_connect(int result)
        {
            if (!result)
            {
                //subscribe(NULL, "$SYS/#", 2);
                emit connected();
            }
            else
                emit connectEnable();
        }
        void on_publish(int id)
        {
            MID++;
            emit messageSent(true);
        }
        void on_subscribe(int mid, int qos_count, const int *granted_qos)
        {
            if (MID != 0)
                emit subscribed();
            MID++;
        }
        void on_message(const mosquitto_message *message)
        {
            if (message->payloadlen)
            {
                QString s(message->topic);
                s += '>';
                s += (char*) message->payload;
                emit messageReceived(s);
            }
        }
    
        int* getMID() {return &MID;}
    
    private:
        int MID;
    
    signals:
        void connected();
        void messageSent(bool);
        void messageReceived(QString);
        void connectEnable();
        void subscribed();
    };
    
    #endif // QTMOSQ_H
    
    

    here above i send the code for the same.

    if you get more please tell me.

    J Offline
    J Offline
    jsulm
    Lifetime Qt Champion
    wrote on 15 Oct 2019, 05:00 last edited by jsulm
    #10

    @Milav So, you get that error here in MainWindow:

    ui->connect->setDisabled(true); 
    mosq = new qtmosq(id, true); // Is it here?
    int size = sizeof(*mosq);
    

    ?
    It should work.
    Are there any other warnings or errors?
    Try to do a complete rebuild: delete build directory, run qmake and build.

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

    M 2 Replies Last reply 15 Oct 2019, 05:08
    0
    • J jsulm
      15 Oct 2019, 05:00

      @Milav So, you get that error here in MainWindow:

      ui->connect->setDisabled(true); 
      mosq = new qtmosq(id, true); // Is it here?
      int size = sizeof(*mosq);
      

      ?
      It should work.
      Are there any other warnings or errors?
      Try to do a complete rebuild: delete build directory, run qmake and build.

      M Offline
      M Offline
      Milav
      wrote on 15 Oct 2019, 05:08 last edited by
      #11

      @jsulm

      when i build the project it give me only warning like follow.

      /home/tdp0009/Teq_Projects/Aug_2019/HMI/Firmware/QT/12_oct_hmi/qt-mosquitto-master/qtmosq.h:14: warning: 'mosqpp::mosquittopp::mosquittopp(const char*, bool)' is deprecated (declared at ../../../../CC_Lib/mosquitto/phytec_wega_build_websockets/usr/local/include/mosquittopp.h:94) [-Wdeprecated-declarations]
      
      /home/tdp0009/Teq_Projects/Aug_2019/HMI/Firmware/QT/12_oct_hmi/qt-mosquitto-master/mainwindow.cpp:57: warning: 'int mosqpp::mosquittopp::connect_async(const char*, int, int)' is deprecated (declared at ../../../../CC_Lib/mosquitto/phytec_wega_build_websockets/usr/local/include/mosquittopp.h:103) [-Wdeprecated-declarations]
      
      /home/tdp0009/Teq_Projects/Aug_2019/HMI/Firmware/QT/12_oct_hmi/qt-mosquitto-master/mainwindow.cpp:80: warning: 'int mosqpp::mosquittopp::subscribe(int*, const char*, int)' is deprecated (declared at ../../../../CC_Lib/mosquitto/phytec_wega_build_websockets/usr/local/include/mosquittopp.h:110) [-Wdeprecated-declarations]
      

      but i face segmentation fault error when i run that project, an i found the line at where i face segmentation fault.

      it is ...

      mosq->subscribe(NULL, "sensors/temprature", 1); // Segmentation falut
      
      M 1 Reply Last reply 15 Oct 2019, 06:10
      0
      • J jsulm
        15 Oct 2019, 05:00

        @Milav So, you get that error here in MainWindow:

        ui->connect->setDisabled(true); 
        mosq = new qtmosq(id, true); // Is it here?
        int size = sizeof(*mosq);
        

        ?
        It should work.
        Are there any other warnings or errors?
        Try to do a complete rebuild: delete build directory, run qmake and build.

        M Offline
        M Offline
        Milav
        wrote on 15 Oct 2019, 05:12 last edited by
        #12

        @jsulm

        Hello

        Here i have send the link at where i download the example.

        Reference link

        J 1 Reply Last reply 15 Oct 2019, 05:19
        0
        • M Milav
          15 Oct 2019, 05:12

          @jsulm

          Hello

          Here i have send the link at where i download the example.

          Reference link

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 15 Oct 2019, 05:19 last edited by
          #13

          @Milav That example does exactly what I suggested you to do:

          ui->connect->setDisabled(true);
          
          mosq = new qtmosq(id, false); // HERE
          connect (mosq, SIGNAL(connectEnable()), this, SLOT(connectEnabled()));
          

          Did you try to build and run this example? If so - does it work?

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

          M 1 Reply Last reply 15 Oct 2019, 05:36
          0
          • J jsulm
            15 Oct 2019, 05:19

            @Milav That example does exactly what I suggested you to do:

            ui->connect->setDisabled(true);
            
            mosq = new qtmosq(id, false); // HERE
            connect (mosq, SIGNAL(connectEnable()), this, SLOT(connectEnabled()));
            

            Did you try to build and run this example? If so - does it work?

            M Offline
            M Offline
            Milav
            wrote on 15 Oct 2019, 05:36 last edited by
            #14

            @jsulm

            Yes i delete the build directory and again i rebuild the whole project but i couldn't run the example. it is not work.

            J 1 Reply Last reply 15 Oct 2019, 05:51
            0
            • M Milav
              15 Oct 2019, 05:36

              @jsulm

              Yes i delete the build directory and again i rebuild the whole project but i couldn't run the example. it is not work.

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 15 Oct 2019, 05:51 last edited by
              #15

              @Milav said in segmentation fault:

              it is not work

              What exactly does this mean? Doesn't build? Crashes? Does not do what it should? ...?

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

              M 1 Reply Last reply 15 Oct 2019, 05:56
              0
              • J jsulm
                15 Oct 2019, 05:51

                @Milav said in segmentation fault:

                it is not work

                What exactly does this mean? Doesn't build? Crashes? Does not do what it should? ...?

                M Offline
                M Offline
                Milav
                wrote on 15 Oct 2019, 05:56 last edited by
                #16

                @jsulm

                it means build successful.

                but it is not run, it is crashes application.

                means while running the application, the application are crash.

                with following error.

                "segmentation fault"

                and i debug the application via qDebug(), the application are crash on following line of code.

                mosq->subscribe(NULL, "sensors/temprature", 1); // Segmentation falut
                
                J 1 Reply Last reply 15 Oct 2019, 05:58
                0
                • M Milav
                  15 Oct 2019, 05:56

                  @jsulm

                  it means build successful.

                  but it is not run, it is crashes application.

                  means while running the application, the application are crash.

                  with following error.

                  "segmentation fault"

                  and i debug the application via qDebug(), the application are crash on following line of code.

                  mosq->subscribe(NULL, "sensors/temprature", 1); // Segmentation falut
                  
                  J Offline
                  J Offline
                  J.Hilk
                  Moderators
                  wrote on 15 Oct 2019, 05:58 last edited by
                  #17

                  @Milav well, did you press connect before you pressed subscribe?

                  If not it will crash...


                  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.

                  M 1 Reply Last reply 15 Oct 2019, 06:05
                  0
                  • J J.Hilk
                    15 Oct 2019, 05:58

                    @Milav well, did you press connect before you pressed subscribe?

                    If not it will crash...

                    M Offline
                    M Offline
                    Milav
                    wrote on 15 Oct 2019, 06:05 last edited by
                    #18

                    @J-Hilk

                    I press first Connect button and than after i press subscribed button.

                    but it is crash...

                    J 1 Reply Last reply 15 Oct 2019, 06:10
                    0
                    • M Milav
                      15 Oct 2019, 05:08

                      @jsulm

                      when i build the project it give me only warning like follow.

                      /home/tdp0009/Teq_Projects/Aug_2019/HMI/Firmware/QT/12_oct_hmi/qt-mosquitto-master/qtmosq.h:14: warning: 'mosqpp::mosquittopp::mosquittopp(const char*, bool)' is deprecated (declared at ../../../../CC_Lib/mosquitto/phytec_wega_build_websockets/usr/local/include/mosquittopp.h:94) [-Wdeprecated-declarations]
                      
                      /home/tdp0009/Teq_Projects/Aug_2019/HMI/Firmware/QT/12_oct_hmi/qt-mosquitto-master/mainwindow.cpp:57: warning: 'int mosqpp::mosquittopp::connect_async(const char*, int, int)' is deprecated (declared at ../../../../CC_Lib/mosquitto/phytec_wega_build_websockets/usr/local/include/mosquittopp.h:103) [-Wdeprecated-declarations]
                      
                      /home/tdp0009/Teq_Projects/Aug_2019/HMI/Firmware/QT/12_oct_hmi/qt-mosquitto-master/mainwindow.cpp:80: warning: 'int mosqpp::mosquittopp::subscribe(int*, const char*, int)' is deprecated (declared at ../../../../CC_Lib/mosquitto/phytec_wega_build_websockets/usr/local/include/mosquittopp.h:110) [-Wdeprecated-declarations]
                      

                      but i face segmentation fault error when i run that project, an i found the line at where i face segmentation fault.

                      it is ...

                      mosq->subscribe(NULL, "sensors/temprature", 1); // Segmentation falut
                      
                      M Offline
                      M Offline
                      mvuori
                      wrote on 15 Oct 2019, 06:10 last edited by
                      #19

                      If temprature is supposed to be temperature, this is a bug:
                      mosq->subscribe(NULL, "sensors/temprature", 1);

                      M 1 Reply Last reply 15 Oct 2019, 06:29
                      0
                      • M Milav
                        15 Oct 2019, 06:05

                        @J-Hilk

                        I press first Connect button and than after i press subscribed button.

                        but it is crash...

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 15 Oct 2019, 06:10 last edited by
                        #20

                        @Milav Did you debug to see whether mosq is not a nullptr? If it's not please provide stack trace after crash.
                        Also, in connectPressed it does a return if port is not set - is it set if you press connect?
                        You should really run through debugger...

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

                        M 1 Reply Last reply 15 Oct 2019, 06:28
                        0
                        • J jsulm
                          15 Oct 2019, 06:10

                          @Milav Did you debug to see whether mosq is not a nullptr? If it's not please provide stack trace after crash.
                          Also, in connectPressed it does a return if port is not set - is it set if you press connect?
                          You should really run through debugger...

                          M Offline
                          M Offline
                          Milav
                          wrote on 15 Oct 2019, 06:28 last edited by
                          #21

                          @jsulm

                          i debug the size of mosq pointer through following code.

                           int size = sizeof(*mosq);
                              qDebug() << size;
                          

                          and output is 20;

                          and in connectpressed button slot are run succesfully.

                          port value are shown correctly.

                          when i run debugger it shows following error.

                          The inferior stopped because it received a signal from the Operating System.
                          
                          Signal name : 
                          SIGILL
                          Signal meaning : 
                          Illegal instruction
                          
                          

                          hope you got my point.

                          J 1 Reply Last reply 15 Oct 2019, 06:48
                          0
                          • M mvuori
                            15 Oct 2019, 06:10

                            If temprature is supposed to be temperature, this is a bug:
                            mosq->subscribe(NULL, "sensors/temprature", 1);

                            M Offline
                            M Offline
                            Milav
                            wrote on 15 Oct 2019, 06:29 last edited by
                            #22

                            @mvuori

                            no it is supposed to be sensors/temprature.

                            1 Reply Last reply
                            0
                            • M Milav
                              15 Oct 2019, 06:28

                              @jsulm

                              i debug the size of mosq pointer through following code.

                               int size = sizeof(*mosq);
                                  qDebug() << size;
                              

                              and output is 20;

                              and in connectpressed button slot are run succesfully.

                              port value are shown correctly.

                              when i run debugger it shows following error.

                              The inferior stopped because it received a signal from the Operating System.
                              
                              Signal name : 
                              SIGILL
                              Signal meaning : 
                              Illegal instruction
                              
                              

                              hope you got my point.

                              J Offline
                              J Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on 15 Oct 2019, 06:48 last edited by
                              #23

                              @Milav said in segmentation fault:

                              i debug the size of mosq pointer through following code.

                              The size of a pointer is fixed, it doesn't matter whether it contains nullptr or something else.
                              Do

                              qDebug() << mosq;
                              

                              instead to see the value of the pointer.
                              Without stack trace I can't tell you what is going on...

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

                              M J 2 Replies Last reply 15 Oct 2019, 07:14
                              0
                              • J jsulm
                                15 Oct 2019, 06:48

                                @Milav said in segmentation fault:

                                i debug the size of mosq pointer through following code.

                                The size of a pointer is fixed, it doesn't matter whether it contains nullptr or something else.
                                Do

                                qDebug() << mosq;
                                

                                instead to see the value of the pointer.
                                Without stack trace I can't tell you what is going on...

                                M Offline
                                M Offline
                                Milav
                                wrote on 15 Oct 2019, 07:14 last edited by
                                #24

                                @jsulm

                                when i execute "qDebug() << mosq;" it gives following output.

                                qtmosq(0xac50b0)
                                

                                how i see stack trace in qt?

                                can you please explore me more about stack trace?

                                J 1 Reply Last reply 15 Oct 2019, 07:20
                                0
                                • J jsulm
                                  15 Oct 2019, 06:48

                                  @Milav said in segmentation fault:

                                  i debug the size of mosq pointer through following code.

                                  The size of a pointer is fixed, it doesn't matter whether it contains nullptr or something else.
                                  Do

                                  qDebug() << mosq;
                                  

                                  instead to see the value of the pointer.
                                  Without stack trace I can't tell you what is going on...

                                  J Offline
                                  J Offline
                                  JonB
                                  wrote on 15 Oct 2019, 07:16 last edited by
                                  #25

                                  @Milav

                                  int size = sizeof(*mosq);

                                  @jsulm

                                  The size of a pointer is fixed,

                                  A slight slip of the tongue there. I think what my colleague @jsulm meant to clarify is: sizeof(...) is a compile-time calculation, it does not matter what the value of mosq is or what it points at run-time, rather this statement just assigns sizeof(qtmosq) regardless. As he says, show us what is in the mosq.

                                  M 1 Reply Last reply 15 Oct 2019, 07:18
                                  0
                                  • J JonB
                                    15 Oct 2019, 07:16

                                    @Milav

                                    int size = sizeof(*mosq);

                                    @jsulm

                                    The size of a pointer is fixed,

                                    A slight slip of the tongue there. I think what my colleague @jsulm meant to clarify is: sizeof(...) is a compile-time calculation, it does not matter what the value of mosq is or what it points at run-time, rather this statement just assigns sizeof(qtmosq) regardless. As he says, show us what is in the mosq.

                                    M Offline
                                    M Offline
                                    Milav
                                    wrote on 15 Oct 2019, 07:18 last edited by
                                    #26

                                    @JonB

                                    when i execute "qDebug() << mosq;" it gives following output.

                                    qtmosq(0xac50b0)

                                    1 Reply Last reply
                                    0
                                    • M Milav
                                      15 Oct 2019, 07:14

                                      @jsulm

                                      when i execute "qDebug() << mosq;" it gives following output.

                                      qtmosq(0xac50b0)
                                      

                                      how i see stack trace in qt?

                                      can you please explore me more about stack trace?

                                      J Offline
                                      J Offline
                                      JonB
                                      wrote on 15 Oct 2019, 07:20 last edited by JonB
                                      #27

                                      @Milav

                                      when i execute "qDebug() << mosq;" it gives following output.
                                      qtmosq(0xac50b0)

                                      I'm not sure this is actually trying to deference the pointer, it may just print its value. I would try something likeqDebug() << mosq->something;, where something is some field you know is supposed to exist & be valid in a qtmosq. Or try qDebug() << *mosq (note the *)?

                                      how i see stack trace in qt?
                                      can you please explore me more about stack trace?

                                      I don't know how you run in your "Embedded Custom Board", but can you run the app from inside a debugger? then when it seg faults you will see a "stack trace" in the debugger showing the call stack when the fault occurred.

                                      J M 2 Replies Last reply 15 Oct 2019, 07:25
                                      1
                                      • J JonB
                                        15 Oct 2019, 07:20

                                        @Milav

                                        when i execute "qDebug() << mosq;" it gives following output.
                                        qtmosq(0xac50b0)

                                        I'm not sure this is actually trying to deference the pointer, it may just print its value. I would try something likeqDebug() << mosq->something;, where something is some field you know is supposed to exist & be valid in a qtmosq. Or try qDebug() << *mosq (note the *)?

                                        how i see stack trace in qt?
                                        can you please explore me more about stack trace?

                                        I don't know how you run in your "Embedded Custom Board", but can you run the app from inside a debugger? then when it seg faults you will see a "stack trace" in the debugger showing the call stack when the fault occurred.

                                        J Offline
                                        J Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on 15 Oct 2019, 07:25 last edited by jsulm
                                        #28

                                        @JonB said in segmentation fault:

                                        I'm not sure this is actually trying to deference the pointer

                                        It does not, but I wanted to see its value :-)
                                        Looks like it's not NULL.

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

                                        J 1 Reply Last reply 15 Oct 2019, 07:27
                                        1
                                        • J jsulm
                                          15 Oct 2019, 07:25

                                          @JonB said in segmentation fault:

                                          I'm not sure this is actually trying to deference the pointer

                                          It does not, but I wanted to see its value :-)
                                          Looks like it's not NULL.

                                          J Offline
                                          J Offline
                                          JonB
                                          wrote on 15 Oct 2019, 07:27 last edited by JonB
                                          #29

                                          @jsulm
                                          Indeedy :) So now let's see how qDebug() << *mosq fares?

                                          M 1 Reply Last reply 15 Oct 2019, 07:32
                                          0

                                          19/61

                                          15 Oct 2019, 06:10

                                          42 unread
                                          • Login

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