为什么我在以下代码中遇到分段错误?
struct Cell
{
cellMode mode;
bool visited;
//bool scanned;
int rowIndex;
int colIndex;
Cell *neighbours;//if using Cell neighbours[3] i am getting a compilation error
Cell()
{
neighbours = new Cell[3];//seg fault here
}
};
Run Code Online (Sandbox Code Playgroud)
当我使用静态数组时,我收到以下错误
neighbours has incomplete type
如果你在new3 Cell的Cell构造函数中,你正在调用3个以上Cell的构造函数.然后,这3个中的每一个再调用3个,依此类推.直到,......等待它......堆栈溢出.欢呼.这是无限的.
你写了一个无限递归函数.你的Cell::Cell构造函数间接调用自己的彻底new表达式,然后反复调用Cell::Cell,一次又一次......最终导致堆栈溢出和崩溃.
(此外,在Cell对象内部不可能有明确的对象数组Cell.这样的数据结构将无限嵌套,即它将具有无限大小.)
请注意,递归本身并不是一般的错误.但它必须在某个时候结束.如果你想以递归方式构建你的树,你可以这样做,但你必须确保你的递归在某个时刻达到最低点.即你的树必须有叶节点.你现在拥有的是没有叶节点的树.这是一个无限递归,试图构建一个无限大的树.这是不可能的.这没有道理.
什么时候构建叶子节点 - 只有你可以回答.我们不知道你想要建造什么样的树.