我从以下代码中遇到段错误。我认为这与我的函数调用有关?

I'm getting a seg fault from the following code. I think it has something to do with my function call?

此代码应该使用包装函数计算所有节点。这是一个循环链表,所以我指向 rear->next with temp 然后遍历 temp 直到 temp ==rear.

int count_all(node *rear) {
    int count = 0;
    if (!rear)
        return 0;
    if (rear == rear->next)
        return 1;
    return recursive_count_all(rear,count);
}

int recursive_count_all(node *rear,int &count)  {
    if (!rear)
        return 0;

    node * temp = rear->next; 

    if (rear == temp)
        return 1;
    else
        temp = temp->next;

    return recursive_count_all(rear->next, ++count);
}

你最终得到了无限递归,因为你的条件 return

if (rear == temp)
    return 1;

正在将您的前一个节点与下一个节点进行比较,因此不会 return #nodes > 1。一旦到达您开始的第一个节点,您应该打破递归条件。

所以像这样

int count_all(node *rear) {
    int count = 0;
    if (!rear)
        return 0;
    if (rear == rear->next)
        return 1;
    return recursive_count_all(rear,rear,count);
}

int recursive_count_all(node* n0, node *rear,int &count)  {
    if (!rear)
        return 0;

    node * temp = rear->next; 

    if (n0 == temp)
        return 1;
    else
        temp = temp->next;

    return recursive_count_all(n0, rear->next, ++count);
}