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. [Solved] Segmentation Fault... What can be?
Forum Updated to NodeBB v4.3 + New Features

[Solved] Segmentation Fault... What can be?

Scheduled Pinned Locked Moved General and Desktop
14 Posts 5 Posters 8.7k 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.
  • D Offline
    D Offline
    dcbasso
    wrote on last edited by
    #4

    I try to use valgrind, but I got this error:

    @
    ** Error: "valgrind" could not be started: No such file or directory **
    @

    I follow this page: "http://doc.qt.digia.com/qtcreator-2.5/creator-analyzer.html":http://doc.qt.digia.com/qtcreator-2.5/creator-analyzer.html

    I will check if getEixo is null, but I don't beleave that's can be the reason of my problem...

    1 Reply Last reply
    0
    • D Offline
      D Offline
      dcbasso
      wrote on last edited by
      #5

      The value of variable getEixo() is <unavailable synchronous data>, on debug mode!

      1 Reply Last reply
      0
      • D Offline
        D Offline
        dcbasso
        wrote on last edited by
        #6

        I read some posts saying to use SIGNALS and SLOTS?
        Why so solution?

        1 Reply Last reply
        0
        • D Offline
          D Offline
          dcbasso
          wrote on last edited by
          #7

          Header:
          @
          #ifndef EIXO_H
          #define EIXO_H

          #include <QObject>
          #include "tipoeixo.h"
          #include "sensor.h"

          class Eixo : public QObject
          {
          Q_OBJECT
          public:
          explicit Eixo(QObject *parent = 0);

          void setId(int newId);
          void setNumeroEixo(int newNumeroEixo);
          void setConjunto(int newConjunto);
          void setMyTipoEixo(TipoEixo* newMyTipoEixo);
          void setSensores(QList<Sensor*> newSensores);
          void addSensor(Sensor* newSensor);
          int getId();
          int getNumeroEixo();
          int getConjunto();
          TipoEixo* getMyTipoEixo();
          QList<Sensor*> getSensores();
          bool isDiferencial();
          

          private:
          int id;
          int numeroEixo;
          int conjunto;
          TipoEixo* myTipoEixo;
          QList<Sensor*> sensores;

          };
          #endif // EIXO_H
          @

          If I change sensores to be a pointer, like this: QList<Sensor*>* sensores;
          The problem can be fixed?
          I will try change this rightnow...

          1 Reply Last reply
          0
          • D Offline
            D Offline
            dcbasso
            wrote on last edited by
            #8

            Problem persists.

            1 Reply Last reply
            0
            • C Offline
              C Offline
              ChrisW67
              wrote on last edited by
              #9

              [quote author="dcbasso" date="1348577357"]The value of variable getEixo() is <unavailable synchronous data>, on debug mode![/quote]

              No debugger required. Stick a:

              @QASSERT(getEixo())
              // or
              if (getEixo() == 0) qFatal("getEixo() is returning null");
              @

              or similar check immediately before the affected line.

              Incidentally, that affected line is adding an element to an anonymous copy of the QList<> and will probably not do what you are expecting.

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andre
                wrote on last edited by
                #10

                A debugger is not required, but way more useful for tracking issues like these.

                But basically, this is your problem:
                @getEixo()->getSensores().append( getSensorConfigurado() );@
                Here, you do two dereferences. The first especially may be problematic. If there is any chance of getEixo() returning 0, then you need to check for that.

                @
                Eixo* eixo = getEixo();
                Q_ASSERT(eixo); //don't do the actual get inside the assert! It will be compiled out for release builds!
                eixo->getSensores().append( getSensorConfigurado() );
                @

                Note that even this does not get you out of the woods yet. You have to be sure that getEixo() always returns 0 or a valid pointer. If you have deleted the Eixo object earlier and the pointer is still returned here, you're in trouble that you can't catch like this.

                1 Reply Last reply
                0
                • L Offline
                  L Offline
                  lgeyer
                  wrote on last edited by
                  #11

                  One might add that you will always suffer from this problem when using multiple dereferencing. This is the reason it is usually forbidden by any coding guidelines.

                  1 Reply Last reply
                  0
                  • D Offline
                    D Offline
                    dcbasso
                    wrote on last edited by
                    #12

                    I found the reason!
                    I fix the error:
                    I was trying to append a some object/pointer to my QList! I remove the append, and just change the object/pointer and my QList is "auto" updated!

                    I really don't undestand why the problem appears when we try to add same object/pointer to QList, but the error don't happened again!!!

                    Thanks all!

                    1 Reply Last reply
                    0
                    • A Offline
                      A Offline
                      andre
                      wrote on last edited by
                      #13

                      If you don't understand, I really suggest you keep on it until you do. Otherwise, I almost guarantee you that you'll get bitten by the same issue again, only this time about an hour before your release deadline...

                      The way you talk about object/pointer gives me the feeling you don't quite understand pointers & objects yet. However, that knowledge really is needed in order to work effectively with C++ and Qt.

                      1 Reply Last reply
                      0
                      • D Offline
                        D Offline
                        dcbasso
                        wrote on last edited by
                        #14

                        I just use the thermology "object/pointer" to suggest that I was working with pointer to change a object, as this:

                        @
                        QList<Sensor*> sensores;
                        @

                        Well, I search a lot about this error and I don't found any good explanation to the error. After I remove the ".append(Sensor*)" on object sensores, the problem was fix, and the "Sensor*" is changed anyway, because I use pointer to change the value os "Sensor" inside the QList!
                        I just make the mistake to try add again on the QList... I think...

                        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