1

クラス ヘッダー (class.h) と実装 (class.cpp) があります。class.h で宣言されたいくつかのメンバー変数があり、class.cpp で問題なく使用しています。class.h にさらに 3 つのメンバー変数を追加しようとしています。

double a;
double b;
double c;

次のように、class.cpp の残りのメンバー変数と同様に、これら 3 人を初期化しています。

Class::Class()
{
    a = 0;
    b = 0;
    c = 0;
    //constructor body
}

このコードは正常にコンパイルされますが、実行時にセグメンテーション違反が発生します。Valgrind は、行 "b = 0;" にサイズ 8 バイトの無効な書き込みがあると言っています。a、b、cが使用されている他の場所。これら 3 つの変数を削除しても問題はありません。ここで何が問題になる可能性がありますか?プログラムに使用できる十分なメモリがあります。ありがとうございました!

編集:ここにクラス定義を追加しました:

class AWidget: public QGraphicsView
{
Q_OBJECT

public:
    AWidget( QWidget * parent = 0 );
    virtual ~AWidget();

    //public functions

private:
    Q_DISABLE_COPY ( AlignmentWidget )

    void updateWidget();
    void updateArrowsVisibility();
    void updateAimLineItemVisibility();

    double x;
    double y;
    double z;

    QGraphicsScene *scene;
    QGraphicsPixmapItem *item;
    QGraphicsPixmapItem *aErrorItem;
    QGraphicsEllipseItem *circle;

    QGraphicsLineItem *LineItem0;
    QGraphicsLineItem *LineItem1;
    QGraphicsLineItem *LineItem2;
    QGraphicsLineItem *LineItem3;
    QGraphicsLineItem *LineItem4;

    double a;
    double b;
    double c;

};

AWidget::AWidget(QWidget *parent)
    scene( 0 ),
    item( 0 ),    
    aErrorItem( 0 ),
    circle(0),
    LineItem0( 0 ),
    LineItem1(0),
    LineItem2(0),
    LineItem3(0),
    LineItem4(0)
{
    //init stuff like scene = new QGraphicsScene(); etc..
    a=0;
    b=0;
    c=0;
}
4

1 に答える 1