2017-08-29 11 views
-1

列挙型を書き換えるときに、代入演算子の中にSIGSEGVが得られます。
私のstruct:列挙型を書き換えるときのSIGSEGV

struct Pawn 
{ 
private: 
    Q_GADGET 
public: 
    Q_PROPERTY(Position position MEMBER m_position) 
    Q_PROPERTY(PawnType pawnType MEMBER m_pawnType) 
    Pawn() : m_position(Position::NotDefined), m_pawnType(PawnType::None) {} 
    Pawn(const Pawn &a_other) 
    { 
     this->m_pawnType = a_other.m_pawnType; 
     this->m_position = a_other.m_position; 
    } 
    Pawn &operator=(const Pawn &a_other) 
    { 
     this->m_pawnType = a_other.m_pawnType; 
     this->m_position = a_other.m_position; 
     return *this; 
    } 
    ~Pawn(){} 

    enum Position 
    { 
     NotDefined = 0, 
     Bottom, 
     Left, 
     Top, 
     Right 

    }; 

    enum PawnType 
    { 
     None = 0, 
     Circle, 
     Square, 
     Diamond, 
     Triangle, 
    }; 

    Q_ENUMS(Position) 
    Q_ENUMS(PawnType) 

    Position m_position; 
    PawnType m_pawnType; 

}; 



typedef Pawn::PawnType PawnType; 
typedef Pawn::Position Position; 

Q_DECLARE_METATYPE(Pawn) 
Q_DECLARE_METATYPE(Pawn::Position) 
Q_DECLARE_METATYPE(Pawn::PawnType) 

行原因エラー:m_board

m_board[a_pawnPosition.y()][a_pawnPosition.x()] = m_board[current.y()][current.x()]; 
m_board[current.y()][current.x()] = Pawn(); 

Definiton:

Pawn m_board[10][10]; 

a_pawnPositioncurrentは境界内にある

それは必ずしも起こるとは限りません。私はQ_PROPERTYがそれを引き起こしていると思いますが、QMLから値を読み込む必要があり、それを修正する方法がわかりません。

+1

スタックトレースを取得するとよいでしょう。 – MrEricSir

+1

'current.y()'と 'a_pawnPosition.y()'はどのような値になりますか?おそらく、それらのメソッドの値を返す前にアサーションを挿入したいと思うかもしれません。 (または、あなたがそれが境界内にあると言ったときにこれを意味しましたか?) –

+3

'a_pawnPosition'と' current'とクラッシュに至る+ +コードが宣言されたメインプログラムMCVEを投稿してください... – jpo38

答えて

0

あなたは正しいです。 currentは範囲外でした。コピーされた値ではなく参照であったため、時々私はそれを数行前にQListから削除していました。あなたの答えをありがとう。

関連する問題