为什么此PHP函数会产生分段错误SIGSEGV?

问题描述

| 我写了下面的代码。
<?php
function f(){
  return f();
}
f();
并获得输出
$ php test.php
Segmentation fault
为什么?我没有使用任何指针。 这是StackOverflow吗?     

解决方法

        这是无限递归的情况,但不是特定原因。这是堆栈溢出。进行递归时,无论是否无限递归,您都可以根据堆栈的大小(以字节为单位)来递归最大深度(添加到堆栈中)。 从技术上讲,这是无限的,但相当长的一段时间您不会出现任何错误:
<?php
function f(){
  sleep(1);
  return f();
}
f();
您需要在递归中将其称为
base case
,以便在它耗尽整个堆栈之前停止它。
<?php
function f($i){
  if($i == 10)
    return;

  echo $i;

  return f(++$i);
}
f(0);
它将打印0到9。 “ 5”错误来自操作系统,报告PHP应用程序遇到了添加到堆栈的问题。那不会写到您的脚本中,因为在系统级,组成PHP的二进制文件已失败。     ,        这不是无限递归吗?您要达到什么目标?     ,        您设置的无限递归会继续添加堆栈帧,直到您超出分配给PHP流程调用堆栈的内存量为止,此时您会遇到分段错误。     ,        这特别来自XDebug扩展。 运行GDB,您将看到:
Program received signal SIGSEGV,Segmentation fault.
0x00007ffff41f7e48 in xdebug_add_stack_frame (zdata=Cannot access memory at address 0x7fffff5fefa8
) at /build/buildd/xdebug-2.1.0/build-php5/xdebug_stack.c:772
772 /build/buildd/xdebug-2.1.0/build-php5/xdebug_stack.c: No such file or directory.
    in /build/buildd/xdebug-2.1.0/build-php5/xdebug_stack.c
如果XDebug被禁用,它将执行直到达到ѭ7。如果
memory_limit
过高,则可能会耗尽RAM并开始交换内存,从而冻结/崩溃计算机。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...