C++ 重写枚举时的SIGSEGV
在重写枚举时,我得到了SIGSEGV内部赋值运算符。C++ 重写枚举时的SIGSEGV,c++,qt,C++,Qt,在重写枚举时,我得到了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::
我的结构:
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[a_pawnPosition.y()][a_pawnPosition.x()] = m_board[current.y()][current.x()];
m_board[current.y()][current.x()] = Pawn();
m_板的定义
:
Pawn m_board[10][10];
a_pawnPosition
和current
在范围内
这并不总是发生。我想可能是Q_属性导致了它,但我需要它们从QML中读取值,并且不知道如何修复它。您是对的
current
超出了范围,因为它是引用,而不是复制的值,有时我会从QList
之前的几行中删除它。谢谢您的回答。获取堆栈跟踪将是一个好的开始。当发生时,current.y()
和a\u pawnPosition.y()
的值是多少?可能您希望在返回这些方法的值之前插入断言。(或者当你说它在边界内时,你的意思是这样的)请发布MCVE,一个主程序,其中a_pawnPosition
和current
,并声明和初始化+导致崩溃的代码…“它并不总是发生”,可能是UB。a\u pawnPosition
和current
是否正确初始化?a\u pawnPosition和current是否在界限内有效界限是什么?