为什么这个PHP函数会产生分段错误(SIGSEGV)?

fre*_*ara 2 php segmentation-fault

我写了以下代码.

<?php
function f(){
  return f();
}
f();
Run Code Online (Sandbox Code Playgroud)

并获得输出

$ php test.php
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

为什么?我没有使用任何指针.

这是StackOverflow?

Eri*_*ser 6

这是一个无限递归的情况,但这不是特别的原因.它是堆栈溢出.当你有递归时,无论是否无限,你都可以根据堆栈的大小(以字节为单位)递归(添加到堆栈)的最大深度.

从技术上讲,这是无限的,但你不会在很长一段时间内得到任何错误:

<?php
function f(){
  sleep(1);
  return f();
}
f();
Run Code Online (Sandbox Code Playgroud)

您需要的是base case在递归中称为a ,以便在它消耗整个堆栈之前停止它.

<?php
function f($i){
  if($i == 10)
    return;

  echo $i;

  return f(++$i);
}
f(0);
Run Code Online (Sandbox Code Playgroud)

其中将打印0到9.

segmentation fault错误来自操作系统,报告PHP应用程序遇到了添加到堆栈的问题.这不会成为您的脚本,因为在系统级别,构成PHP的二进制文件失败了.