Как «игнорировать» segfault в cpp? - PullRequest
0 голосов
/ 28 мая 2018

Итак, этот вопрос может показаться довольно странным, но позвольте мне объяснить: я написал код на C ++ для анализа некоторых данных, и эти данные разделены на файлы.Я передаю имена этих файлов (их много) в качестве аргумента для программы.Возможно, я допустил какую-то ошибку в своем коде или данные в некоторых из этих файлов не «хороши», и это пока не имеет значения.Но для некоторых файлов программа останавливается и возвращает мне сообщение об ошибке.Есть способ даже с segfault перейти к следующему файлу в списке аргументов, используя только C ++?

Может быть, я мог бы использовать какой-то сценарий оболочки, чтобы запустить его для каждого из файлов, а затем, если я получуSegfault будет продолжать работать один за другим.Но сейчас это не то, чего я хочу, если я не смогу решить эту проблему, я попробую таким образом.

Заранее спасибо, ребята.

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете на самом деле установить обработчик сигнала для SIGSEGV (в большинстве Unix-подобных операционных систем), который будет вызываться, когда ваша программа запускается в segfault, и если вы хотите, чтобы мог обрабатывать это любым подходящим способом (включая игнорирование).Это довольно эзотерично (java делает это, но это единственное полусумное использование, которое я когда-либо видел), и редко бывает правильным, и правильно справляться с ошибкой в ​​таком обработчике сложно , так как вы не можете быть уверены, что вызвало ошибку и в каком состоянии находится ваша программа после того, как вы вернетесь из обработчика сигнала.

Итак,в то время как вы можете «обрабатывать» SIGSEGV я бы посоветовал вам вместо этого искать другие способы очистки входных данных, чтобы вы вместо этого избежали ошибки в первую очередь.

...