Шта је грешка сегментације у Линуку?

Квар сегментације или сегфаулт је грешка меморије у којој програм покушава да приступи меморијској адреси која не постоји или програм нема права приступа. Честа је грешка у лоше написаним програмима Ц и Ц ++. Када програм погоди грешку сегментације, често се сруши са фразом грешке „Грешка сегментације“.

Основе грешке сегментације

На нивоу оперативног система, процес сегментације дели расположиву меморију на сегменте. Када наиђе на грешку у писању у меморијски сегмент, оперативни систем Уник или Линук шаље програму сигнал СИГСЕГВ, који се затим руши са поруком „грешка сегментације”. Грешке у сегментацији обично су специфичне за језике ниског нивоа као што је Ц, који захтевају од програмера да додељује меморију покренутом програму, део по део.

Врсте грешака у сегментацији

Грешке у сегментацији могу настати из сличних услова. Преливање међуспремника, као што је покушај досезања изван граница низа, може проузроковати сегфаулт или покушај приступа меморији која није додељена или је избрисана. Покушај писања у меморију која је само за читање такође може проузроковати грешку у меморији. Коначно, на неким Уник и Линук системима показивачи који су иницијализовани нулл не могу се дереференцирати; на тај начин ће доћи до сегфаулт-а.

Избегавање грешака у сегментацији као корисник

Ако покрећете програм који сте преузели са Интернета и нисте упознати са изворним кодом, можда вам се неће посрећити: све што можете је да поднесете извештај о грешци и надате се решењу. Само да бисте били сигурни да имате најновију верзију софтвера. Поред тога, проверите локацију извештаја о грешци да бисте видели да ли је грешка већ пријављена и да ли су доступна нека привремена заобилазна решења или закрпе за преузимање.

Избегавање грешака у сегментацији као програмер

Једини начин да се у писаним програмима у потпуности избегну грешке је да будете опрезни са додељивањем и брисањем меморије и да пратите грешке када се појаве. Проналажење тачног извора грешке може бити незгодно, поготово јер се можда неће појавити сваки пут када покренете програм. Поред тога, стварна грешка се можда неће налазити ни близу места где се програм руши, јер неисправна алокација меморије може срушити програм само када му се први пут приступи. Програм за отклањање грешака може ухватити сегфактуре чим се појаве и чак их пратити до линије.