【问题标题】:Segmentation Fault with Recursive Function递归函数的分段错误
【发布时间】:2014-11-05 04:29:22
【问题描述】:

我对 C 编程非常陌生,似乎无法找到我遇到的分段错误的原因。我写的程序如下:

# include <stdio.h>
# include <stdlib.h>

int recursive(int x){
    if(x=0)
    {
        return 2;
    }
    else
    {
        return 3*(x-1)+recursive(x-1)+1;
    }
}
int main(int argc, char *argv[])
{
    int N = atoi(argv[1]);
    return recursive(N);
}

我将不胜感激。

非常感谢

【问题讨论】:

  • 应该是if( 0 == x)

标签: c recursion segmentation-fault


【解决方案1】:
if(x=0){...}

错了

应该是

if(x==0){...}

注意:

if (x = 0) 

is the same as: 

x = 0; if (x)

【讨论】:

    【解决方案2】:

    这个:

    if(x=0){
    

    不是(纯粹的)测试,而是作业。它在if 中工作,因为它也有一个值(零),但它始终为假,因此永远不会采用分支,即递归永远不会停止。

    您应该启用所有编译器警告,这很容易被编译器捕获。

    【讨论】:

      【解决方案3】:

      if(x = 0) 更改为if(0 == x)

      0 == x 而不是x == 0 是一个很好的手工规则,因为如果出现像= 而不是== 这样的错字,编译器会报错。

      【讨论】:

        【解决方案4】:

        段错误是由于使用了argv[1]。确保使用参数调用函数,如下所示:

        $ ./a.out 6
        

        a.out 是您的程序名称,6 是您要应用该功能的号码。 以下行将创建一个段错误:

        $ ./a.out
        

        因为第一个参数没有设置。

        另外,请注意第二行:使用== 而不是=

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 2014-04-27
          • 2019-11-16
          • 2021-06-18
          • 2017-12-25
          • 2019-08-13
          • 1970-01-01
          相关资源
          最近更新 更多