Подтвердить что ты не робот

Как я могу сразу закрыть программу в C?

Я пишу код C, в котором я анализирую некоторые данные. Я установил программу для обработки только 100 входов данных. когда он имеет более 100, он дает ошибку сегментации. Я хочу создать способ, чтобы, когда число превышает 100, пользователь будет предупрежден и программа завершится. Я знаю, как сделать это из main, просто вернув 0, однако мне нравится 5 вызовов функций от основного, и это трудно сделать, даже если возврат 0 в этой функции будет поддерживать цикл.

Есть ли какой-либо немедленный путь для завершения всей программы без основного?

4b9b3361

Ответ 1

Стандартная функция exit - это то, что вы ищете:

Обычно завершает процесс, выполняя регулярную очистку для завершающих процессов.

Во-первых, все функции, зарегистрированные вызовами atexit, выполняются в обратном порядке их регистрации. Затем все потоки закрываются и временные файлы удаляются, и, наконец, элемент управления возвращается в среду хоста.

Аргумент статуса возвращается в среду хоста.

Было бы лучше, если бы вы исправили ошибку segfault.

Ответ 2

Вам нужно включить стандартную библиотеку lib, а затем вы можете вызвать exit, где хотите:

#include <stdlib.h>
...
exit(status);

где status - целое число, представляющее код выхода. Для чего относится статус: для соглашения 0 успех, другие значения указывают на состояние ошибки.

Ответ 3

Вы также можете fprintf(stderr, ....), а затем вызвать abort(); это может быть полезно, если вы хотите позже отладить свою ошибку.

Но я считаю, что вы должны перекодировать свою программу, чтобы ограничения по размеру предоставлялись только доступными ресурсами: поэтому, если вы запускаете свою программу на гораздо более крупном компьютере (что бы это ни значило), она могла обрабатывать более 100 входов.

Ответ 4

Немного лучше всего сделать, чтобы поймать ошибку сегментации обработчиком сигнала и обработчик сигнала поднять сигнал SIGSTOP.

Таким образом ваша программа останавливается, но остается в памяти. Затем вы можете приложить к нему отладчик и увидеть программу во всей ее славе, замороженной на месте в точке, где произошла операция SEGFAULT.

Это может быть полезно для поиска проблем в длинных программах, которые вы не используете внутри среды разработки.