访问导致分段错误的类成员

时间:2015-03-27 16:52:17

标签: c++ qt

我的班级" ComponentArea"看起来像这样:

#ifndef COMPONENTAREA_H
#define COMPONENTAREA_H

#include <QObject>
#include <QWidget>
#include <QScrollArea>
#include <QtDesigner/QtDesigner>
#include <QMouseEvent>
#include <QPainter>

#include <Components/Sockets/socket.h>

class ComponentArea : public QScrollArea
{
Q_OBJECT

public:
    ComponentArea(QWidget* parent = 0);
    void connectSockets(Socket* a, Socket* b);
    void childBlock_childSocket_mousePressEvent(Socket* sender, QMouseEvent* event);
    void childBlock_childSocket_mouseReleaseEvent(Socket* sender, QMouseEvent* event);

private:

    Socket* pressedSocket;
    void mouseReleaseEvent(QMouseEvent *event);
};

#endif // COMPONENTAREA_H

在构造函数中,我将pressedSocket设置为0:

pressedSocket = 0;

每当我尝试使用pressedSocket时,在其中一个事件中,我都会遇到分段错误:

void ComponentArea::childBlock_childSocket_mousePressEvent(Socket *sender, QMouseEvent *event)
{
    if((pressedSocket == 0) && (event->button() == Qt::LeftButton)) //SIGSEGV here
    {
        pressedSocket = sender;
    }
}

我对每个成员都有这种效果,即使是简单的布尔也是如此。 我不知道自己做错了什么。有什么建议吗?提前致谢!

2 个答案:

答案 0 :(得分:0)

可能thisevent为空。检查您是否实例化了您的课程。

如果您在Linux上开发,那么您可以使用Valgrind运行您的程序。它会准确地说明出了什么问题,只需仔细阅读它的消息。

答案 1 :(得分:0)

可能是“免费使用”问题,这意味着您正在尝试访问已删除的对象。你检查过了吗?

E.g。将断点放在SIGSEGV发生的行上。检查 pressedSocket 成员的 this 指针和值。如果你很幸运,它会有一个像“0xfeeefeee”这样的模糊值 - 在这种情况下你的对象不再存在,所以你无法访问那里的任何东西。

否则可能是您尝试取消引用NULL指针,在这种情况下, this 显示为“0x00000000”。 (正如JánosRoden刚刚指出的那样。)