C++ 与枚举进行ANDing时出现分段错误

C++ 与枚举进行ANDing时出现分段错误,c++,segmentation-fault,C++,Segmentation Fault,我有一个类CField和一个包含2d CField数组的类CBoard 当我这样做时: board(0,0)->Is (CField::CHECK) 我在Is()方法中得到一个segfault。GDB在&之后指向我,所以我认为这与它有关。原因是什么 完整代码: -标题 -source代码中没有任何内容实际创建CBoard::fields所需的数组。因此,当调用CField代码时,此是无效指针。这可能与&无关。最可能的原因是板(0,0)返回无效(或空)指针。这里可能会出现许多问题。由于您没

我有一个类CField和一个包含2d CField数组的类CBoard

当我这样做时:

board(0,0)->Is (CField::CHECK)
我在Is()方法中得到一个segfault。GDB在&之后指向我,所以我认为这与它有关。原因是什么

完整代码:
-标题

-source

代码中没有任何内容实际创建
CBoard::fields
所需的数组。因此,当调用
CField
代码时,
是无效指针。

这可能与
&
无关。最可能的原因是
板(0,0)
返回无效(或空)指针。

这里可能会出现许多问题。由于您没有发布
CBoard
Create
方法,我不知道您是否正确分配了
字段的存储空间。无论如何,
CField*operator()(int x,int y)const
可能只是返回null,因为您编写的条件的计算结果不是真的。你在这里检查空指针吗


另外,与其参与这种疯狂的双指针内存管理,为什么不直接使用
std::vector

当您在新创建的
CBoard
对象上调用时,您的
操作符()将返回空指针。取消对空指针的引用将导致未定义的行为,在您的情况下是segfault。

您的电路板是逐零的。如果您查看逻辑,在
操作符()
中,您将尝试返回不存在的
字段[0][0]

电路板的两阶段构造有点烦人,您有一堆额外的代码来管理它,而您实际上并不需要这些代码

这就是问题所在

    for (int i = 0; i < x; ++i)
            fields [x] = new CField [y];
for(int i=0;i
按i而不是x索引字段

    for (int i = 0; i < x; ++i)
            fields [i] = new CField [y];
for(int i=0;i
提供更多代码。您可能错误地设置了
。在这种情况下,vector是多余的-我总是一次创建和删除整个表。vector不会多余。你花这么多时间试图重写vector已经做过的事情是过分的。我的板是9x9。见编辑2。我的边界检查是正确的,因为我检查的是坏的,不是好的值。我知道在某个地方有这样的错误!谢谢!单独的Create()方法对我很有用,因为我多次“创建”同一个类实例(以将其返回到开始状态)。如果可以的话,我更喜欢RAII。