私はC言語を使い慣れていないので、このクエリが基本的であれば私を許してください。別の関数からmainを呼び出す
別の関数からmain()を呼び出し、プログラムを無限に実行したいと考えています。コードはここにあります:
#include <stdio.h>
void message();
int main()
{
message();
return 0;
}
void message()
{
printf("This is a test message. \n");
main();
}
私はこのプログラムが無限に動作することを期待しています。しかし、それはしばらくの間実行され、突然停止します。テストメッセージの横に印刷されたカウンタ変数を使用して、「これはテストメッセージです」というステートメントが見つかりました。 Iを取得その後174608回エラーメッセージ
セグメンテーション障害(コアダンプ)
を印刷し、プログラムを終了します。このエラーは何を意味しますか?なぜプログラムは174608回しか実行されないのですか(無限ではありません)
は、あなたのマシンは、無限のRAMを持っていますか? –
メソッドが呼び出されると、戻りアドレスがスタックに格納されます。メソッドが返ってくると、アドレスは再びスタックから取り出されます。しかし、あなたの方法は決して戻らず、お互いを交互に呼びます。だから、174608の呼び出しの後、あなたのスタックは単に完全です。そして、このスタックがオーバーフローすると、セグメンテーションフォールトが発生します。スタックオーバーフローはプロセス全体を破壊し、エラー処理を非常に困難にするため、明確なエラーメッセージはありません。 –
回答提供されたRenéが正解であり、コメントではなく回答になるはずです。私はあなたのプログラムでmain関数を呼び出すべきではないということを追加したいだけです。決して。 (1)またはfor(;;)の間に無限ループを使用したい場合。 – lsrom