2

为什么我在以下代码中出现分段错误?

    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
        }
    };

当我使用静态数组时,出现以下错误

neighbours has incomplete type

4

3 回答 3

6

如果你new3 Cells inCell的构造函数,你正在调用 3 更多Cell的构造函数。然后这 3 个中的每一个再调用 3 个,依此类推。直到,一个......等待它......堆栈溢出。欢呼。它是无限的。

于 2013-06-17T21:02:00.637 回答
5

你写了一个无限递归函数。您的Cell::Cell构造函数间接调用自己的彻底new表达式,而后者Cell::Cell又一次又一次地调用......这最终导致堆栈溢出和崩溃。

Cell(此外,对象内不可能有明确的对象数组Cell。这样的数据结构将是无限嵌套的,即它的大小是无限的。)

请注意,递归本身通常没有任何问题。但它必须在某个时候结束。如果你想递归地构建你的树,你可以这样做,但你必须确保你的递归在某一点或另一点触底。即你的树必须有叶节点。你现在拥有的是一棵没有叶子节点的树。这是一个无限递归,试图构建一棵无限大的树。这是不可能的。这没有道理。

何时需要构建您的叶节点 - 只有您可以回答。我们不知道您要构建什么样的树。

于 2013-06-17T21:02:07.253 回答
0

由于构造函数在每个实例中调用自身 3 次,因此由于永无止境的递归,您基本上是在创建一个无限循环。这就是你的问题所在。

于 2013-06-17T21:03:12.480 回答