【发布时间】:2016-07-14 02:55:53
【问题描述】:
我是 C 新手,如果这个查询是基本的,请见谅。
我想从另一个函数调用 main(),让程序无限运行。代码在这里:
#include <stdio.h>
void message();
int main()
{
message();
return 0;
}
void message()
{
printf("This is a test message. \n");
main();
}
我希望看到这个程序无限运行。但是,它运行了一段时间,然后突然停止。使用我在测试消息旁边打印的计数器变量,我发现语句“这是一条测试消息”。打印了 174608 次,之后我收到一条错误消息
分段错误(核心转储)
然后程序终止。这个错误是什么意思?而程序为什么只运行了 174608 次(为什么不是无限次)?
【问题讨论】:
-
你的机器有无限的内存吗?
-
当一个方法被调用时,返回地址被放入栈中。当方法返回时,地址再次从堆栈中取出。但是您的方法永远不会返回,它们会轮流调用对方。因此,在 174608 次调用之后,您的堆栈已满。这个堆栈过低会导致您收到分段错误。没有更清晰的错误信息,因为堆栈溢出破坏了整个过程,使错误处理变得非常困难。
-
René 提供的答案是正确的,应该是一个答案,而不仅仅是评论。我只想补充一点,你永远不应该在你的程序中调用 main 函数。绝不。如果你想要无限循环,请使用 while(1) 或 for(;;)。
-
@詹姆斯邦德。你真的知道谁调用了你程序的 Main() 函数吗?你真的尝试过这段代码进行无限循环运行吗?
-
@RenéVogt 感谢您的精彩回答。我现在完全明白了。我不知道这个概念。我会永远记住这一点。