我的班级" 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;
}
}
我对每个成员都有这种效果,即使是简单的布尔也是如此。 我不知道自己做错了什么。有什么建议吗?提前致谢!
答案 0 :(得分:0)
可能this
或event
为空。检查您是否实例化了您的课程。
如果您在Linux上开发,那么您可以使用Valgrind运行您的程序。它会准确地说明出了什么问题,只需仔细阅读它的消息。
答案 1 :(得分:0)
可能是“免费使用”问题,这意味着您正在尝试访问已删除的对象。你检查过了吗?
E.g。将断点放在SIGSEGV发生的行上。检查 pressedSocket 成员的 this 指针和值。如果你很幸运,它会有一个像“0xfeeefeee”这样的模糊值 - 在这种情况下你的对象不再存在,所以你无法访问那里的任何东西。
否则可能是您尝试取消引用NULL指针,在这种情况下, this 显示为“0x00000000”。 (正如JánosRoden刚刚指出的那样。)