Я новичок в C, поэтому простите меня, если этот запрос является основным.Вызов основной из другой функции
Я хочу вызвать main() из другой функции и сделать программу бесконечной. Код находится здесь:
#include <stdio.h>
void message();
int main()
{
message();
return 0;
}
void message()
{
printf("This is a test message. \n");
main();
}
Ожидается, что эта программа будет работать бесконечно. Тем не менее, он работает некоторое время, а затем внезапно останавливается. Используя переменную счетчика, которую я напечатал рядом с тестовым сообщением, я обнаружил, что утверждение «Это тестовое сообщение». печатается 174608 раз, после чего я получаю сообщение об ошибке
вина Сегментация (ядро сбрасывали)
и программа завершается. Что означает эта ошибка? И почему программа работает только 174608 раз (почему бы и не бесконечно)?
Есть ли у вашей машины бесконечная RAM? –
Когда вызывается метод, обратный адрес помещается в стек. Когда метод возвращается, адрес снова берется из стека. Но ваши методы никогда не возвращаются, они поочередно называют друг друга. Поэтому после 174608 звонков ваш стек просто заполнен. И этот стек overlow приводит к ошибке сегментации, которую вы получаете. Нет четкого сообщения об ошибке, поскольку переполнение стека развращает весь процесс и затрудняет обработку ошибок. –
Ответ René предоставлен правильно и должен быть ответом не просто комментарием. Я просто хочу добавить, что вы никогда не должны называть главную функцию в своей программе. Никогда. Если вы хотите использовать бесконечный цикл в то время как (1) или для (;;). – lsrom