Как я могу сразу закрыть программу в C?
Я пишу код C, в котором я анализирую некоторые данные. Я установил программу для обработки только 100 входов данных. когда он имеет более 100, он дает ошибку сегментации. Я хочу создать способ, чтобы, когда число превышает 100, пользователь будет предупрежден и программа завершится. Я знаю, как сделать это из main, просто вернув 0, однако мне нравится 5 вызовов функций от основного, и это трудно сделать, даже если возврат 0 в этой функции будет поддерживать цикл.
Есть ли какой-либо немедленный путь для завершения всей программы без основного?
Ответы
Ответ 1
Стандартная функция exit
- это то, что вы ищете:
Обычно завершает процесс, выполняя регулярную очистку для завершающих процессов.
Во-первых, все функции, зарегистрированные вызовами atexit, выполняются в обратном порядке их регистрации. Затем все потоки закрываются и временные файлы удаляются, и, наконец, элемент управления возвращается в среду хоста.
Аргумент статуса возвращается в среду хоста.
Было бы лучше, если бы вы исправили ошибку segfault.
Ответ 2
Вам нужно включить стандартную библиотеку lib, а затем вы можете вызвать exit, где хотите:
#include <stdlib.h>
...
exit(status);
где status - целое число, представляющее код выхода.
Для чего относится статус: для соглашения 0 успех, другие значения указывают на состояние ошибки.
Ответ 3
Вы также можете fprintf(stderr, ....)
, а затем вызвать abort()
; это может быть полезно, если вы хотите позже отладить свою ошибку.
Но я считаю, что вы должны перекодировать свою программу, чтобы ограничения по размеру предоставлялись только доступными ресурсами: поэтому, если вы запускаете свою программу на гораздо более крупном компьютере (что бы это ни значило), она могла обрабатывать более 100 входов.
Ответ 4
Немного лучше всего сделать, чтобы поймать ошибку сегментации обработчиком сигнала и обработчик сигнала поднять сигнал SIGSTOP.
Таким образом ваша программа останавливается, но остается в памяти. Затем вы можете приложить к нему отладчик и увидеть программу во всей ее славе, замороженной на месте в точке, где произошла операция SEGFAULT.
Это может быть полезно для поиска проблем в длинных программах, которые вы не используете внутри среды разработки.