Segmentation fault (core dumped)

Iniciado por neveldine, 3 Mayo 2012, 16:03 PM

0 Miembros y 1 Visitante están viendo este tema.

neveldine


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SUP 33799

int main()
{
   int *cad = NULL;
   int i;

   cad = malloc(sizeof(int) * 2);

   for (i = 0; i < SUP; i++) {
       cad[i] = i;
       printf("%d ", cad[i]);
   }
   printf("\n");
   
   return EXIT_SUCCESS;
}


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

fary

El buffer es un poco pequeño para algo tan grande,no? :rolleyes:
Un byte a la izquierda.

Eternal Idol

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.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

neveldine

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...