Не убивать программу при недопустимом поведении

На баш

bc -l <<< "scale=4 ; $((RANDOM % 10000 ))/10000"

где 1/10000— ваша случайная точность, а 4— ваша выходная точность

0
26.02.2021, 10:22
2 ответа

Процессы завершаются с помощью функции «сигнал», которая присутствует в ядре UNIX с 1970-х годов. Сигнал, который процесс получает при доступе к недопустимой памяти, называется SIGSEGV (нарушением сегментации ).

Большинство сигналов приводят к завершению, но программа может либо игнорировать сигналы определенного типа, либо запускать процедуру обработки сигналов, когда сигнал доставлен. Хотя не все сигналы можно игнорировать или обрабатывать, SIGSEGV может.

Это задокументировано на справочных страницах для signal (2)и signal (7). Однако,вы пометили свой вопрос с помощью C++. Скорее всего, в C++ для этого есть собственный механизм, основанный на системном вызове signal.

Написав все это, я нашел программу на C++, которая перехватывает SIGSEGV в Stackoverflow:https://stackoverflow.com/a/918891/3548109.

4
18.03.2021, 22:28

Поскольку доступ к неотображенной памяти считается ошибочным поведением приложений, их завершение абсолютно корректно.

Представьте, что другие программы обращаются к памяти ваших программ с другой стороны...

Но вы можете попробовать использовать небольшой -Linux, скомпилированный без MMU -поддержки (только в однопользовательской системе ). Такая система позволит мошеннический доступ к памяти.

4
18.03.2021, 22:28

Теги

Похожие вопросы