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?
这是一个无限递归的情况,但这不是特别的原因.它是堆栈溢出.当你有递归时,无论是否无限,你都可以根据堆栈的大小(以字节为单位)递归(添加到堆栈)的最大深度.
从技术上讲,这是无限的,但你不会在很长一段时间内得到任何错误:
<?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的二进制文件失败了.