Должна ли моя библиотека обрабатывать SIGSEGV при вводе неверного указателя?

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

Если я немедленно проверю этот указатель FILE * и обнаружу, что он приводит к ошибке segfault, правильнее ли обработать сигнал, установить errno и корректно завершить работу; или ничего не делать и использовать установленный обработчик сигналов вызывающего абонента, если он у него есть?

Превалирует мнение, что «библиотеки никогда не должны вызывать сбой». Но я считаю, что, поскольку именно этот сигнал, безусловно, является ошибкой вызывающего абонента, мне не следует пытаться скрыть от него эту информацию. У него может быть установлен собственный обработчик, который будет реагировать на проблему по-своему. Та же самая информация МОЖЕТ быть получена с помощью errno, но расположение по умолчанию для SIGSEGV было установлено по уважительной причине, и передача сигнала соответствует этой философии, либо заставляя вызывающего обработать свои ошибки, либо путем сбоя и защиты его от дальнейшего повреждения .

Согласны ли вы с этим анализом, или вы видите веские причины использовать SIGSEGV в этой ситуации?

12
задан User123abc 23 January 2012 в 19:44
поделиться