Segmentation Fault
Ciencia y Tecnologia
El error se presenta en tiempo de ejecución y consiste (básicamente) en que se esta intentando una operación ilegal con la memoria. Los sistemas tipo UNIX, esta diseñados para protegerse y proteger a otros procesos de programas estúpidos o maliciosos.
Las causas mas usuales son las siguientes:
1.-Tratar de Escribir en un apuntador que "apunta" a Nulo.
char *foo=NULL;
strcpy(foo,"Muere...");
2.-Usar un apuntador que no ha sido inicializado.
char *foo;
strcpy(foo,"Muere...");
Cuando no se inicializa un apuntador, este apunta una dirección de memoria desconocida, si somos tipos afortunados, apuntara a una zona de memoria fuera del espacio de direcciones de nuestro proceso, y tendremos un segmentation fault. Pero si no somos tipos con suerte, este apuntador podría causar estragos en las estructuras de datos que usemos en nuestro programa.
3.-Tratar de escribir en memoria de "Solo Lectura"
char *foo="My String\n";
strcpy(foo,"Muere...");
Muchos compiladores de C/C++, ponen los "strings" en zonas de memoria de solo lectura.
4.-Sobrepasando los limites de un arreglo.
int Array[20];
Array[26]=666;
5.-Haciendo cosas muy tontas con malloc() y free().
char buf[60];
free(buf);
ó
char *foo=(char *) malloc(33);
free(foo);
free(foo);
Algunas veces, tener una de estas equivocaciones no es un error, pero definitivamente es una mala practica de programación. Algunos compiladores y Sistemas Operativos son mucho mas tolerantes que otros, es por esto que si tu programa corria "Sin problemas " en un sistema, truene en otro.
P.D:rnstux, el nuevo editor esta muy chido, thx.
Permalink: http://www.mononeurona.org/entries/view/vendaval/2156
Commentblogs:









