Ошибки сегментации: что это такое и общие советы, как их избежать? - PullRequest
0 голосов
/ 19 октября 2011

В большинстве источников, с которыми я сталкиваюсь, ошибки сегментации определяются следующим образом: они возникают, когда программа ссылается на неопределенную область виртуальной памяти

Но поскольку я еще не посещал занятия по операционным системам, я обычно понятия не имею, что это означает, что это «неопределенная область» виртуальной памяти ...

Кроме того, многие из моих C-программ имеют тенденцию сталкиваться с ошибкой сегментации, и, к сожалению, я понятия не имею, как их исправить. Есть ли полезные советы о том, как избежать этих сбоев и что делать, когда они встречаются, когда вся логика программы кажется исправной?

1 Ответ

1 голос
/ 19 октября 2011

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

Простой пример - использование переменной в стеке, за которой следует некоторый код. Скажем, у нас есть

char a[4];
int i=0;
for(i=0; i<1000; ++0)
     a[i]='a';
printf("Hi this line will never get printed because last line killed it\n");

Итак, в стеке у нас есть 4 байта, выделенных для «a», еще 4 байта для int «i», и теперь у нас есть код, который является функцией. Дело в том, что оператор for записывает 1000 байтов в «a», который перезаписывает «i», а также уничтожает код, следующий за ним.

...