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. Segmentation Fault through signal SIGSEGV

Segmentation Fault through signal SIGSEGV

Scheduled Pinned Locked Moved General and Desktop
3 Posts 2 Posters 5.0k 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.
  • A Offline
    A Offline
    Agouri
    wrote on last edited by
    #1

    Alright, this is something new to me. After googling around I found out that segmentation faults are given when the program is pointed to use memory that it doesn't have access to.

    I've recently started experiencing these errors after I tried making a custom button class that would enclose, in its clicked() signal, an integer.

    Here's the custom button class:
    .h:
    @#include <QtGui>

    #ifndef CUSTOMBUTTON_H
    #define CUSTOMBUTTON_H

    class CustomButton : public QPushButton //This simple class allows us to map arguments in the Widget's cicked() signal.
    { //In the project, it's used in the delete-edit buttons so the program knows which part of the Movie/Theater/Screening list we're referring to
    Q_OBJECT

    public:
    CustomButton(QString name,int num, QWidget *parent = 0);

    signals:
    void clicked(int pos);

    private:
    QSignalMapper *signalMapper;
    };

    #endif // CUSTOMBUTTON_H@

    .cpp:
    @#include "custombutton.h"

    CustomButton::CustomButton(QString name,int num = 0, QWidget *parent) //Our constructor
    : QPushButton(name,parent)
    { //Our button's now created and shown, through the superconstructor. Let's take care of its clicked() signal.

    signalMapper = new QSignalMapper(this);
    
    connect(this, SIGNAL(clicked()), signalMapper, SLOT(map()));
    signalMapper->setMapping(this, num);
    
    
    connect(signalMapper, SIGNAL(mapped(int)),this, SIGNAL(clicked(int)));
    

    }@

    And then in my main code I do:
    @CustomButton *edit_button = new CustomButton("Edit",i,0);
    edit_button->setFixedWidth(30);
    connect(edit_button,SIGNAL(clicked(int)),this,SLOT(edit_movie(int))); //When the user decides to edit a movie, we set the class'es working_with var to the position of the film in the MovieList and we set the screen to the appropriate one.

    CustomButton *del_button = new CustomButton("Delete",i,0); //We pass i as an argument to the button, so it can relate to the movie it's set next to.
    del_button->setFixedWidth(45);
    connect(del_button,SIGNAL(clicked(int)),this,SLOT(del_movie(int)));@

    Where i is the number I want it to have in the signal.

    Thing is, thorugh the debugger it doesn't give me a segfault if I press the Delete button. It all happens in the edit one.

    As I'm still pretty confused and in a situation where I don't even know WHAT to ask about, if you need anything else from me please say so and I will provide.

    Here's the backtrace:

    0 QHash<QObject*, QString>::findNode qhash.h 884 0x69e98594
    1 QHash<QObject*, QString>::contains qhash.h 874 0x69e98568
    2 QSignalMapper::map qsignalmapper.cpp 267 0x69debe0c
    3 QSignalMapper::map qsignalmapper.cpp 257 0x69debda2
    4 QSignalMapper::qt_static_metacall moc_qsignalmapper.cpp 64 0x69debfce
    5 QMetaObject::activate qobject.cpp 3547 0x69de9baf
    6 QAbstractButton::clicked moc_qabstractbutton.cpp 220 0x10cb4b8
    7 QAbstractButtonPrivate::emitClicked qabstractbutton.cpp 548 0xe2e517
    8 QAbstractButtonPrivate::click qabstractbutton.cpp 541 0xe2e495
    9 QAbstractButton::mouseReleaseEvent qabstractbutton.cpp 1123 0xe2f941
    10 QWidget::event qwidget.cpp 8362 0xae63de
    11 QAbstractButton::event qabstractbutton.cpp 1082 0xe2f7cc
    12 QPushButton::event qpushbutton.cpp 683 0xecfeba
    13 QApplicationPrivate::notify_helper qapplication.cpp 4554 0xa9c020
    14 QApplication::notify qapplication.cpp 4097 0xa9a26a
    15 QCoreApplication::notifyInternal qcoreapplication.cpp 876 0x69dd3b76
    16 QCoreApplication::sendSpontaneousEvent qcoreapplication.h 234 0x113137e
    17 QApplicationPrivate::sendMouseEvent qapplication.cpp 3163 0xa98ad6
    18 QETWidget::translateMouseEvent qapplication_win.cpp 3363 0xb03171
    19 QtWndProc qapplication_win.cpp 1696 0xafdf66
    20 USER32!IsDialogMessageW C:\Windows\syswow64\user32.dll 0 0x76726238
    21 USER32!RegisterSystemThread C:\Windows\syswow64\user32.dll 0 0x767278b0
    22 ?? 0 0x30000
    23 USER32!AllowForegroundActivation C:\Windows\syswow64\user32.dll 0 0x767268ea
    24 qt_is_translatable_mouse_event qapplication_win.cpp 1463 0xafd465
    25 USER32!GetMessageExtraInfo C:\Windows\syswow64\user32.dll 0 0x76727d31
    26 ?? 0

    And here is what

    1 Reply Last reply
    0
    • A Offline
      A Offline
      Agouri
      wrote on last edited by
      #2

      Let me also note that if I don't run the program through the debugger, it sporadically crashes.

      Most of the time clicking the Edit button will take me where I want to be with no problem.
      Sometimes it crashes.

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

        Why use a heavy weighted object like the signal mapper here? A much more simple approach would be to use a small protected slot that emits your signal:

        @

        class CustomButton : public QPushButton
        {
        Q_OBJECT

        public:
        CustomButton(QString name,int num, QWidget *parent = 0);

        signals:
        void clicked(int pos);

        private slots:
        void emitClickedWithInt();

        private:
        int myNumber;
        };

        CustomButton::CustomButton(QString name,int num, QWidget *parent)
        : QPushButton(name, parent), myNumber(num)
        {
        connect(this, SIGNAL(clicked()), this, SLOT(emitClickedWithInt()));
        }

        void CustomButton::emitClickedWithInt()
        {
        emit clicked(myNumber);
        }
        @

        http://www.catb.org/~esr/faqs/smart-questions.html

        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