我有一个CField类和一个包含CField的2d数组的CBoard。ANDing枚举时出现分段错误
当我这样做:
board(0,0)->Is (CField::CHECK)
我得到的是一个段错误()方法。 GDB在&之后指向我,所以我认为它与它有关。原因是什么?
全码:
http://pastebin.com/vetShYsL - 头
http://pastebin.com/pGNPpa8N - 源
我有一个CField类和一个包含CField的2d数组的CBoard。ANDing枚举时出现分段错误
当我这样做:
board(0,0)->Is (CField::CHECK)
我得到的是一个段错误()方法。 GDB在&之后指向我,所以我认为它与它有关。原因是什么?
全码:
http://pastebin.com/vetShYsL - 头
http://pastebin.com/pGNPpa8N - 源
电路板的2阶段结构有点烦人,你有一堆额外的代码来管理它,你并不真正需要。
这虽然
for (int i = 0; i < x; ++i)
fields [x] = new CField [y];
索引字段的错误由我不是X
for (int i = 0; i < x; ++i)
fields [i] = new CField [y];
在你的代码没有什么实际创建所需CBoard::fields
阵列。所以当你的CField
代码被调用时,this
是一个无效的指针。
这可能与&
无关。最可能的原因是board(0,0)
正在返回无效(或NULL)指针。
可能有很多可能出现的问题在这里。由于您没有发布Create
方法CBoard
我不知道您是否曾经为fields
正确分配存储空间。无论如何,CField* operator() (int x_, int y_) const
可能仅仅是返回null,因为你写的条件没有评估为真。你在这里检查一个空指针吗?
此外,不是参与这个疯狂的双指针内存管理,为什么不使用一个std::vector
?
当您在新创建的CBoard
对象上调用它时,您的operator()
返回空指针。解引用空指针会导致未定义的行为,在你的情况下是段错误。
您的主板零为零。如果你看看你的逻辑,在operator()
,你会尝试返回fields[0][0]
,这不存在。
我的板子是9x9。请参阅编辑2.我的绑定检查是正确的,因为我检查是坏的,而不是正确的值。 – Xirdus 2010-10-29 22:28:44
提供更多的代码。你可能错误地设置了你的'board'。 – JoshD 2010-10-29 22:15:24
'删除[]字段;' – sbi 2010-10-29 22:18:55