请考虑以下代码:
Storyboard
在执行代码时,我收到运行时错误(Segmentation Fault)和输出:#include<stdio.h>
int main()
{
printf("hello");
main(1, 2);
return 0;
}
无限次。
我知道当程序试图访问不允许访问的内存区域时会发生hello
。我的代码的哪一行访问内存是不允许访问的,为什么?我希望它是segmentation fault
main(1, 2)
怎么会被无限次印刷?
答案 0 :(得分:3)
虽然您可以在C中自己调用main
(注意您不允许在C ++中使用),但您需要(i)确保参数列表有效,并且(ii)确保您拥有机制到位以防止无限递归。
由于您没有这些,您的程序的行为是未定义。
答案 1 :(得分:0)
因为你的主函数是递归调用自身,并给自己太多参数。你也会通过递归调用无限次来导致堆栈溢出。
答案 2 :(得分:0)
我知道当程序试图访问不允许访问的内存区域时会发生分段错误。我的代码哪一行访问内存不允许访问,为什么?
要回答这个问题,您需要了解如何在C中实现递归以及堆栈的工作方式。
Watch this video。虽然他没有告诉你在无限递归时会发生什么,但我相信你可以搞清楚。
答案 3 :(得分:0)
你目前正在实现一个带有2个参数的递归函数main( main(1,2)),但是你已经编写的主函数没有参数( main()),所以递归方法永远不会结束。虽然我无法理解你想要做什么,但在 main 函数上实现递归过程通常是一个坏主意。最后,由于堆栈指针将尝试访问禁止的内存段,因此内存不足。所以你的程序就会崩溃 为了将来在递归过程中的努力,我建议你设置一个条件,当遇到递归时将结束。