У меня есть программа, которая иногда выходит из арифметики указателей. Я знаю, что это происходит, но я не могу легко проверить заранее, чтобы увидеть, есть ли в нем ошибки или нет - либо я могу «предварительно просканировать» входные данные, чтобы посмотреть, не вызовет ли это ошибку (которую невозможно определить) или я могу исправить это, чтобы не использовать арифметику указателей, что потребовало бы значительно большего объема работы, или я могу попытаться поймать ошибку сегмента. Итак, мой вопрос:
1) Как в Си можно поймать сигфо? Я знаю, что-то в ОС вызывает ошибку по умолчанию, но что может сделать программа на С, если она может умереть немного более изящно, чем просто Segmentation fault
?
2) Насколько это портативно?
Я представляю, что это крайне непереносимое поведение, поэтому, если вы публикуете какой-либо код, чтобы поймать segfault, скажите, пожалуйста, на чем он работает. Я работаю на Mac OS X, но мне бы хотелось, чтобы моя программа работала на максимально возможном количестве платформ, и я хочу посмотреть, какие у меня есть варианты.
И не волнуйтесь - в основном, все, что я хочу сделать, это напечатать более удобное для пользователя сообщение об ошибке и освободить немного памяти и затем умереть. Я не планирую просто игнорировать все полученные ошибки и пахать впереди.