我有以下Qt类(class):

class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    GLWidget(QWidget *parent = 0);
private:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();

    double posX;
    double posY;
    double posZ;
};

当我将其放入构造函数中时,我的程序在SIGABRT期间生成了GLWidget::~GLWidget:
this->posX = 0.0;
this->posY = 0.0;
this->posZ = 1.0;

这些成员变量不在类中的其他任何地方使用。如果我不初始化成员变量,则程序不会失败。这如何导致SIGABRT

堆栈跟踪

最佳答案

您是否检查了核心文件以查看其死亡位置?

也就是说,最可能的情况是除以零和/或断言X和Y不为零。

编辑:同样,当您不初始化值时,程序似乎有错误,但似乎可以正常/更好地工作。

EDIT2以回应评论:您可以配置unix / linux系统(使用coreadm)在程序崩溃或中止时留下一个“核心”文件。它包含有关调用堆栈,寄存器,内存等的信息。似乎确实找到了它(或类似的东西)。那行说



实际上让我改变了主意。看起来您的堆已损坏,并且删除导致该堆变得可见。一种可能性是您删除了该对象两次。如果您使用的是Linux,则valgrind可能是找出发生了什么的最佳方法。

10-08 10:48