递归中的分段错误

时间:2014-01-01 16:39:28

标签: c pointers

我正在尝试用C学习树。我需要找到最长的路径。我正在使用递归方法。但我得到分段错误。我无法找到它为什么会发生。我不需要逻辑。我想自己做。只是想知道我在做什么基本的错误。

欢迎任何处理指针的建议。

void longestPath(struct node *p,int *maxlen,int count)
{
    if(p==NULL)
        return;

    count++;

    if(p->lft==NULL && p->rt==NULL )
    {
        if(*maxlen<count)
             *maxlen=count;
    }

    longestPath(p->lft,maxlen,count);
    longestPath(p->rt,maxlen,count); 
} 

2 个答案:

答案 0 :(得分:2)

也检查maxlen是否为NULL。这可能是你在没有验证它的情况下取消指针的问题。

int maxpath = 0;
int count = 10; // for example
struct node* nodes; // initialized somewhere else
longestPath( nodes, &maxpath, count );

答案 1 :(得分:1)

您可以使用返回值:

,而不是通过指针传递结果
unsigned longestPath(struct node *p)
{
    unsigned ll,rr;

    if (!p) return 0;

    ll = longestPath(p->lft);
    rr = longestPath(p->rt);

    return ll > rr ? 1+ll : 1+rr;
}