Minnesegmentsfeil

Fra Wikipedia, den frie encyklopedi
Gå til: navigasjon, søk

En minnesegmentsfeil (engelsk: segmentation fault, ofte forkortet til segfault) er en bestemt feilsituasjon som kan oppstå under kjøring av programvare. En minnesegmentsfeil oppstår når en prosess forsøker å aksessere en minneposisjon utenfor sitt tillatte område, eller forsøker å aksessere dette minnet på en måte den ikke har tillatelse til (f.eks. å prøve å skrive til et skrivebeskyttet område).

Segmentering er en tilnærming til minnestyring og beskyttelse i et operativsystem. Denne metoden har for det meste blitt erstattet av minneveksling, men mye av terminologien fra segmentering brukes fremdeles, som nettopp «minnesegmentsfeil». Noen operativsystemer har fremdeles segmentering på et logisk nivå, selv om minneveksling brukes som hovedpolisen for minnestyring.

UNIX-programmerere bruker ofte begrepet synonymt med «segmentation violation» og det tilknyttede signalet, SIGSEGV.

Microsoft Windows brukes begrepet «General protection fault».

Eksempel[rediger | rediger kilde]

Her er et eksempel på hvordan man kan skrive et program i ANSI C som skaper en minnesegmentsfeil:

 #include <string.h>
 
 int main()
 {
   memset((char *)0x0, 42, 200);
 }

Om man kompilerer og kjører dette på Linux, får man følgende:

 % gcc -o segfault segfault.c
 % ./segfault
 Minnesegmentsfeil
 %

Backtrace fra gdb:

 Program received signal SIGSEGV, Segmentation fault.
 0x40089357 in memset () from /lib/libc.so.6
 (gdb) bt
 #0  0x40089357 in memset () from /lib/libc.so.6
 #1  0x40012280 in _rtld_global () from /lib/ld-linux.so.2
 #2  0x080483b0 in main ()