Foros del Web » Programación para mayores de 30 ;) » C/C++ »

"Segmentation fault" ¿por qué?

Estas en el tema de "Segmentation fault" ¿por qué? en el foro de C/C++ en Foros del Web. Ya me había enfrentado varias veces al segmentation fault porque tenía algún puntero despistado pero hoy me ha salido de nuevo y no le veo ...
  #1 (permalink)  
Antiguo 03/12/2009, 10:43
 
Fecha de Ingreso: diciembre-2009
Ubicación: European Union
Mensajes: 29
Antigüedad: 14 años, 5 meses
Puntos: 2
"Segmentation fault" ¿por qué?

Ya me había enfrentado varias veces al segmentation fault porque tenía algún puntero despistado pero hoy me ha salido de nuevo y no le veo lógica, no entiendo cuál es el problema. He reducido mi código a lo mínimo para localizar el error.

typedef struct{
unsigned char rojo, verde, azul;
int datos;
}Tipo_Pixel;

int main(){
Tipo_Pixel primera[576][768];
Tipo_Pixel segunda[576][768];
Tipo_Pixel tercera[576][768];
printf("Hola Mundo\n");
return 0;
}

Si quito la línea roja, al ejecutarlo leo Hola Mundo. Si dejo la línea roja me devuelve Segmentation Fault.

Yo la única diferencia que veo es que sin esa línea reservo unos 6MB de RAM mientras que con esa línea reservo unos 9MB. ¿cuál es el problema? Mi programa necesita 5 estructuras de ese tipo y cuando intento declarar más de 2 ya me salta con Segmentation Fault.
  #2 (permalink)  
Antiguo 04/12/2009, 03:19
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: "Segmentation fault" ¿por qué?

Jodes la pila supongo (es finita), fijate que pasa si declaras las variables fuera del main. De otra manera usa memoria dinamica ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 04/12/2009, 16:45
 
Fecha de Ingreso: diciembre-2009
Ubicación: European Union
Mensajes: 29
Antigüedad: 14 años, 5 meses
Puntos: 2
Respuesta: "Segmentation fault" ¿por qué?

Muchísimas gracias Eternal Idol. He declarado las tablas como variable global y se ha arreglado.
Había buscado por google y leí algo de hacer malloc() o algo así pero esto me parece mucho más sencillo. Aunque declarar estas variables como globales en vez de locales no tiene mucho sentido en mi programa xD (espero que no me revisen el código ), lo importante es que funciona.
  #4 (permalink)  
Antiguo 04/12/2009, 19:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: "Segmentation fault" ¿por qué?

De nadas

PD. Con malloc/free es la otra manera que te habia mencionado (memoria dinamica).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:12.