首页 > 解决方案 > 我从以下代码中得到一个段错误。我认为这与我的函数调用有关?

问题描述

此代码应该使用包装函数计算所有节点。这是一个循环链表,所以我用temp指向rear->next,然后用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);
}

标签: c++recursionsegmentation-faultwrapper

解决方案


你最终会有一个无限递归,因为你的条件返回

if (rear == temp)
    return 1;

正在将您的前一个节点与下一个节点进行比较,因此不会返回 #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);
}

推荐阅读