为什么我在以下代码中遇到分段错误(核心转储)?

-5 c recursion segmentation-fault post-increment

在这个代码中使用 a--b++显示分段错误,但如果给予--a++b它的工作,为什么?!

add(a,b)
{ 
   if (a==0)
       return b;
    else
       return add(a--,b++); //why this line didn't work??! 
}
Run Code Online (Sandbox Code Playgroud)

Sou*_*osh 5

后增量和减量运算符实际上递增或递减的值表达式求值之后,意味着它会改变的价值观ab他们已经传递给函数后.

这样,你会最终传递的不变值a,并badd ()功能全,这将导致堆栈溢出(导致分段错误),因为这基本上是一个递归函数永不满足的条件返回的时间.

OTOH,如果使用预递增或递减操作,值ab将得到它们传递给递归下降之前add ()调用,从而满足该return条件,因此你的程序按预期运行.

也就是说,您应该指定函数的返回类型,例如,在这种情况下int.