Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: neveldine en 3 Mayo 2012, 16:03 pm



Título: Segmentation fault (core dumped)
Publicado por: neveldine en 3 Mayo 2012, 16:03 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define SUP 33799
  6.  
  7. int main()
  8. {
  9.    int *cad = NULL;
  10.    int i;
  11.  
  12.    cad = malloc(sizeof(int) * 2);
  13.  
  14.    for (i = 0; i < SUP; i++) {
  15.        cad[i] = i;
  16.        printf("%d ", cad[i]);
  17.    }
  18.    printf("\n");
  19.  
  20.    return EXIT_SUCCESS;
  21. }
  22.  

Si SUP es, por ejemplo, 20, no hay Segment fault. Si le doy un valor, por ejemplo, 33799 lanza este error al ejecutar el programa.

¿Por qué no da error de segmento a partir de cad[2]?

Gracias de antemano


Título: Re: Segmentation fault (core dumped)
Publicado por: fary en 3 Mayo 2012, 16:27 pm
El buffer es un poco pequeño para algo tan grande,no? :rolleyes:


Título: Re: Segmentation fault (core dumped)
Publicado por: Eternal Idol en 3 Mayo 2012, 16:58 pm
Por casualidad ... en algun momento llegaras a memoria invalida ... calcula que cada pagina de memoria suele ocupar 4096 bytes. En sintesis C/C++ te permite acceder a cualquier direccion aunque este fuera de los limites logicos de tu reserva de memoria, no lo hagas.


Título: Re: Segmentation fault (core dumped)
Publicado por: neveldine en 3 Mayo 2012, 17:03 pm
Vale, por lo que me dices, entiendo que el sistema operativo detecta el fallo de segmento cuando te sales del rango de direcciones que te asigna, ¿verdad?

Creo que voy a tener que leer más sobre el heap...