Ця стаття не містить . (лютий 2021) |
Помилка сегментації (англ. Segmentation fault) — помилка програмного забезпечення, що виникає при виконанні програми при спробі звернення до відсутніх або захищених від запису ділянок оперативної пам'яті, або при спробі зміни пам'яті забороненим способом (Що це?).
Сегментна адресація пам'яті є одним із підходів до організації, керування і захисту оперативної пам'яті в операційній системі. На окремих апаратних платформах та/або окремих операційних системах вона була доповнена або замінена сторінковою пам'яттю, проте в документаціях за традицією використовують термін «Помилка сегментації». Деякі операційні системи досі використовують сегментацію на деяких логічних рівнях, а сторінкова пам'ять використовується як основна політика управління пам'яттю.
В UNIX-подібних операційних системах процес, який звертається до недійсних ділянок пам'яті, отримує сигнал SIGSEGV. У Microsoft Windows цей процес створює виняток STATUS_ACCESS_VIOLATION, і, як правило, запускає програму налагоджувача Dr. Watson, яка показує користувачеві вікно з пропозицією відправити звіт про помилку Microsoft.
Приклади
Приклад коду мовою ANSI C, який, як правило, призводить до помилки сегментації на платформах із захистом пам'яті при читанні:
int main() { int *p = 0; int a = *p; return 0; }
Після запуску змінна p містить нульову адресу службової області пам'яті, яка звичайно доступна лише ядру ОС, спроба прочитати значення за цією адресою призводить до помилки сегментації.
Приклад програми мовою ANSI C, яка, як правило, призводить до помилки сегментації на платформах із захистом пам'яті при запису:
int main() { const char *s = "hello world"; *(char *)s = 'H'; return 0; }
При компіляції програми рядок «hello world» буде розміщений в секції програми з бінарною позначкою «тільки для читання». При запуску програми операційна система завантажує цю секцію в сегмент пам'яті, призначений тільки для читання. Після запуску змінна s вказує на адресу рядка, а спроба змінити значення символьної константи h в цій області пам'яті призводить до помилки сегментації.
Див. також
Це незавершена стаття про операційні системи. Ви можете проєкту, виправивши або дописавши її. |
Це незавершена стаття про програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno lyutij 2021 Pomilka segmentaciyi angl Segmentation fault pomilka programnogo zabezpechennya sho vinikaye pri vikonanni programi pri sprobi zvernennya do vidsutnih abo zahishenih vid zapisu dilyanok operativnoyi pam yati abo pri sprobi zmini pam yati zaboronenim sposobom Sho ce Segmentna adresaciya pam yati ye odnim iz pidhodiv do organizaciyi keruvannya i zahistu operativnoyi pam yati v operacijnij sistemi Na okremih aparatnih platformah ta abo okremih operacijnih sistemah vona bula dopovnena abo zaminena storinkovoyu pam yattyu prote v dokumentaciyah za tradiciyeyu vikoristovuyut termin Pomilka segmentaciyi Deyaki operacijni sistemi dosi vikoristovuyut segmentaciyu na deyakih logichnih rivnyah a storinkova pam yat vikoristovuyetsya yak osnovna politika upravlinnya pam yattyu V UNIX podibnih operacijnih sistemah proces yakij zvertayetsya do nedijsnih dilyanok pam yati otrimuye signal SIGSEGV U Microsoft Windows cej proces stvoryuye vinyatok STATUS ACCESS VIOLATION i yak pravilo zapuskaye programu nalagodzhuvacha Dr Watson yaka pokazuye koristuvachevi vikno z propoziciyeyu vidpraviti zvit pro pomilku Microsoft PrikladiPriklad kodu movoyu ANSI C yakij yak pravilo prizvodit do pomilki segmentaciyi na platformah iz zahistom pam yati pri chitanni int main int p 0 int a p return 0 Pislya zapusku zminna p mistit nulovu adresu sluzhbovoyi oblasti pam yati yaka zvichajno dostupna lishe yadru OS sproba prochitati znachennya za ciyeyu adresoyu prizvodit do pomilki segmentaciyi Priklad programi movoyu ANSI C yaka yak pravilo prizvodit do pomilki segmentaciyi na platformah iz zahistom pam yati pri zapisu int main const char s hello world char s H return 0 Pri kompilyaciyi programi ryadok hello world bude rozmishenij v sekciyi programi z binarnoyu poznachkoyu tilki dlya chitannya Pri zapusku programi operacijna sistema zavantazhuye cyu sekciyu v segment pam yati priznachenij tilki dlya chitannya Pislya zapusku zminna s vkazuye na adresu ryadka a sproba zminiti znachennya simvolnoyi konstanti h v cij oblasti pam yati prizvodit do pomilki segmentaciyi Div takozhPerepovnennya bufera Ce nezavershena stattya pro operacijni sistemi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi Ce nezavershena stattya pro programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi