Falha de segmentação
Origem: Wikipédia, a enciclopédia livre.
Falha de segmentação (segmentation fault, também referido por segfault) é um erro ocorrido num programa. Uma falha de segmentação ocorre quando um programa tenta aceder (ler ou gravar) a um endereço na memória RAM que está reservado para outro programa (ou o próprio sistema operativo), ou que não existe.
Nos sistemas Unix ou Unix-like quando acontece este tipo de erro o sinal SIGSEGV é enviado ao programa, permitindo ao utilizador saber que houve segmentation fault, normalmente depois disto as informações úteis para um futuro debug são gravadas no ficheiro core (core dump).
[editar] Exemplo
O seguinte programa, escrito em Linguagem C, gera uma falha de segmentação ao ser executado
#include <stdlib.h> int main(void) { char *p = NULL; /* p é um apontador do tipo char que aponta agora para NULL */ *p = 'x'; /* Tentata gravar o caracter 'x' no endereço 0 (o endereco apontado por NULL) */ return 0; }
Compilado e executado no NetBSD cria a seguinte saída (output):
$ cc -g3 -o segfault segfault.c $ ./segfault Segmentation fault
Executando o GDB para fazer o debug:
Program received signal SIGSEGV, Segmentation fault. 0x080487b0 in main () at segfault.c:4 4 *p = 'x'; (gdb) bt #0 0x080487b0 in main () at segfault.c:4