C和无限循环中的分段错误 - 自调用主函数

时间:2017-09-08 12:17:04

标签: c

请考虑以下代码:

Storyboard

在执行代码时,我收到运行时错误(Segmentation Fault)和输出:#include<stdio.h> int main() { printf("hello"); main(1, 2); return 0; } 无限次。

我知道当程序试图访问不允许访问的内存区域时会发生hello。我的代码的哪一行访问内存是不允许访问的,为什么?我希望它是segmentation fault

main(1, 2)怎么会被无限次印刷?

4 个答案:

答案 0 :(得分:3)

虽然您可以在C中自己调用main(注意您不允许在C ++中使用),但您需要(i)确保参数列表有效,并且(ii)确保您拥有机制到位以防止无限递归

由于您没有这些,您的程序的行为是未定义

答案 1 :(得分:0)

因为你的主函数是递归调用自身,并给自己太多参数。你也会通过递归调用无限次来导致堆栈溢出。

答案 2 :(得分:0)

  

我知道当程序试图访问不允许访问的内存区域时会发生分段错误。我的代码哪一行访问内存不允许访问,为什么?

要回答这个问题,您需要了解如何在C中实现递归以及堆栈的工作方式。

Watch this video。虽然他没有告诉你在无限递归时会发生什么,但我相信你可以搞清楚。

答案 3 :(得分:0)

你目前正在实现一个带有2个参数的递归函数main( main(1,2)),但是你已经编写的主函数没有参数( main()),所以递归方法永远不会结束。虽然我无法理解你想要做什么,但在 main 函数上实现递归过程通常是一个坏主意。最后,由于堆栈指针将尝试访问禁止的内存段,因此内存不足。所以你的程序就会崩溃 为了将来在递归过程中的努力,我建议你设置一个条件,当遇到递归时将结束。