отказ сегментации на 14,04, но не перестал работать на 10,04

Я использую ubuntu 14.04 64bit LTS, и я пишу программу обработки изображений в C. Когда я запускаю любую программу в терминале, она показывает отказ сегментации (выведенное ядро).
Тот же прогон программы приятно в 10,04.

Какая-либо справка?

$ cc -o out.e sub.c -lm
$ ./out.e
Segmentation fault (core dumped)
0
задан 14 October 2014 в 12:42

1 ответ

Что на самом деле произошло, подробно твердо сказать, но я дам пример вида проблемы.

то, Что важно, - то, что программа, работавшая на 10,04, но, перестала работать на 14,0. Точная проблема могла отличаться, но могла быть подобна и связана:

Что-то противоречит правилам

, ошибка "отказ сегментации" обычно означает, что к некоторой памяти получили доступ, который не принадлежит программе. Может случиться так, что и на 10,04 и на 14.04, был такой несанкционированный доступ к памяти, но это не вызвало проблемы на 10,04.

Правила строго не осуществляются

, Который означал бы, что это работало просто случайно в 10,04; Это довольно возможно, потому что по многим причинам, память поблизости "официальная" память Вашей программы может также принадлежать Вашей программе технически.
, Который должен сделать, думает легче для компилятора, или сделайте программу быстрее более регулярным доступом к памяти.
этим, программе можно позволить сделать вещи, которые не позволяется сделать на основе текста программы.

Допуск может измениться

, Какая "неофициальная" память, к которой можно получить доступ без отказа сегментации, зависит от версии компилятора и версий библиотеки, которые оба изменили.

самый простой, и наиболее распространенный случай должен быть то, что существует ошибка в программе, куда доступ к памяти перешел к далекому, как доступ к байту после массива of-one ошибкой в индексе.

Сводка

, ошибка существовала прежде, но это работало так или иначе.
Теперь, это не работает, и это - просто нормальная ошибка, которая вызывает отказ сегментации.

Для положительного аспекта: когда это работало с ошибкой, это, возможно, создало неправильные результаты - который намного хуже, чем катастрофический отказ, который Вы видите теперь.


Осуществляют правила

А, хороший подход для отладки этого вида проблемы должен оснастить программу для осуществления правил, которые не осуществляются нормальной системой во время выполнения.
Один инструмент, чтобы сделать это при поиске проблемы с доступом к памяти valgrind ( man valgrind ).

1
ответ дан 6 October 2019 в 23:33

Другие вопросы по тегам:

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