Я использую ubuntu 14.04 64bit LTS, и я пишу программу обработки изображений в C. Когда я запускаю любую программу в терминале, она показывает отказ сегментации (выведенное ядро).
Тот же прогон программы приятно в 10,04.
Какая-либо справка?
$ cc -o out.e sub.c -lm
$ ./out.e
Segmentation fault (core dumped)
Что на самом деле произошло, подробно твердо сказать, но я дам пример вида проблемы.
то, Что важно, - то, что программа, работавшая на 10,04, но, перестала работать на 14,0. Точная проблема могла отличаться, но могла быть подобна и связана:
, ошибка "отказ сегментации" обычно означает, что к некоторой памяти получили доступ, который не принадлежит программе. Может случиться так, что и на 10,04 и на 14.04, был такой несанкционированный доступ к памяти, но это не вызвало проблемы на 10,04.
, Который означал бы, что это работало просто случайно в 10,04; Это довольно возможно, потому что по многим причинам, память поблизости "официальная" память Вашей программы может также принадлежать Вашей программе технически.
, Который должен сделать, думает легче для компилятора, или сделайте программу быстрее более регулярным доступом к памяти.
этим, программе можно позволить сделать вещи, которые не позволяется сделать на основе текста программы.
, Какая "неофициальная" память, к которой можно получить доступ без отказа сегментации, зависит от версии компилятора и версий библиотеки, которые оба изменили.
самый простой, и наиболее распространенный случай должен быть то, что существует ошибка в программе, куда доступ к памяти перешел к далекому, как доступ к байту после массива of-one ошибкой в индексе.
, ошибка существовала прежде, но это работало так или иначе.
Теперь, это не работает, и это - просто нормальная ошибка, которая вызывает отказ сегментации.
Для положительного аспекта: когда это работало с ошибкой, это, возможно, создало неправильные результаты - который намного хуже, чем катастрофический отказ, который Вы видите теперь.
А, хороший подход для отладки этого вида проблемы должен оснастить программу для осуществления правил, которые не осуществляются нормальной системой во время выполнения.
Один инструмент, чтобы сделать это при поиске проблемы с доступом к памяти valgrind ( man valgrind
).