Что такое ошибка сегментации?

В Ubuntu я много раз сталкивался с ошибкой сегментации. Что такое ошибка сегментации и когда она возникает?

3 ответа

Решение

Ошибка, связанная с ошибкой сегментации (или segfault, или SIGSEGV) в Ubuntu и других Unix-подобных операционных системах, или из-за общей ошибки защиты в Windows, возникает, когда программа пытается получить доступ к той части памяти, к которой нет доступа, или к которой она обращается. доступ запрещен. Ошибка сегментации - это своего рода сбой программы, то есть ненормальное завершение программы. См. Статьи в Википедии о сбоях, защите памяти, сбое сегментации, сбое общей защиты и SIGSEGV для получения дополнительной информации (и более текстурированного понимания темы, чем представлено здесь).

Ошибка сегментации почти всегда происходит из-за ошибки в программе, в которой она возникает. Я предполагаю, что большинство или все ваши ошибки сегментации происходят из одного и того же приложения. Пожалуйста, предоставьте более подробную информацию об обстоятельствах, при которых на вашей машине происходят ошибки сегментации, и о том, какая программа дает сбой. Также предоставьте полный и точный текст сообщения об ошибке, которое вы получаете, и любых других сообщений, которые появляются перед ним. This should make it possible for us to provide detailed advice specific to your problem (rather than just general information about what a segmentation fault is).

The best way for you to provide this information is for you to edit your question to include it. Alternatively, if you want this question to be just about segmentation faults in general, you could post a new question to ask about what specifically is causing your segmentation faults (if you do this, make sure to provide all these details in your new question).

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

Прошли те времена, когда люди привыкли отслеживать ассемблерный код и устранять проблемы. Абендс, доктор Ватсон, Ошибка сегментации. Те зеленые дни прошли.

Одна из причин ошибки сегментации заключается в сбое кода, имеющего прямой доступ к памяти. Когда часть кода пытается получить доступ к сегменту памяти другого приложения, возникает ошибка сегментации. Выделение памяти иногда перемещается, чтобы позволить выделять большие непрерывные блоки памяти. В то время как оно пытается восстановиться, ядро ​​изо всех сил пытается сохранить всю информацию о своей памяти в файл, текущее состояние всех приложений, запущенных на процессоре, и их состояние (последний запуск инструкции) в файл и просто умереть. Он также попытается сохранить как можно больше информации для восстановления и закрыть как можно больше файлов, чтобы на жестком диске не было битых ссылок.

Отладка и исправление, если вы можете воспроизвести его часто. Если вы не можете воспроизвести это, просто возьмите свои руки, встаньте на колени и молитесь, как черт, чтобы вы не видели это "регулярно".

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