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

Comprendiendo calloc

Estas en el tema de Comprendiendo calloc en el foro de C/C++ en Foros del Web. Hola a todos. Estoy intentando crear arrays que se puedan redimensionar. Para eso necesito utilizar la función que menciono en el título de este post ...
  #1 (permalink)  
Antiguo 07/11/2007, 11:10
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Comprendiendo calloc

Hola a todos. Estoy intentando crear arrays que se puedan redimensionar. Para eso necesito utilizar la función que menciono en el título de este post además de realloc. El problema es que me detuve a mirar un poco como funcionan, y me entraron algunas dudas. Este es el código de prueba:

Código PHP:
 int *p;
 
  
calloc (1sizeof ( *) );

  if ( 
!= NULL )
  {
        
p[0] = 9;
        
p[1] = 10;
        
p[2] = 20;
        
p[7] = 5000;  
        
        
printf "%i"p[7] );    // esto imprime justamente 5000!!
  
}
  else
  {
        
printf ("No se pudo crear el array.");      
  } 
Lo que no entiendo es lo siguiente: el primer argumento de calloc, es el número de elementos que quiero que contenga mi array, y el segundo sería el tamaño que tendrá cada espacio de memoria correspondiente. Lo que no entiendo es lo siguiente, si yo le estoy diciendo que me reserve espacio de memoria para solamente un elemento, ¿Por qué puedo acceder a tantos elementos como yo quiera?.
Espero que alguien pueda sacarme la duda en esto. Gracias de antemano. Saludos!!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 07/11/2007, 11:39
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Comprendiendo calloc

p es un puntero y C/C++ no tienen comprobacion de limites en los arrays. Este codigo tambien compila y sin usar memoria dinamica:

Código:
char p[1];
p[740] = 'B';
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 07/11/2007, 12:36
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Comprendiendo calloc

Pero entonces, ¿Por qué es necesario para redimensionar un arreglo la función realloc, si tan solo obteniendo el puntero que devuelve calloc me basta para acceder a la cantidad de elementos que yo quiera?
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 07/11/2007, 12:44
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Comprendiendo calloc

Cita:
Iniciado por mariano_donati Ver Mensaje
Pero entonces, ¿Por qué es necesario para redimensionar un arreglo la función realloc, si tan solo obteniendo el puntero que devuelve calloc me basta para acceder a la cantidad de elementos que yo quiera?
Si necesitas acceder a mas elementos de los que reservaste originalmente necesitas realloc, puede que en tu ejemplo no pase nada pero proba el que te deje: genera una excepcion no controlada y se termina el proceso (da lo mismo que la memoria sea estatica o dinamica).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 07/11/2007, 12:45
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Re: Comprendiendo calloc

Puedes acceder a ellos como tal, otra cosa es que existan o que el sistema operativo te finalice el programa por una violación de segmento.

Una cosa es lo que puedes compilar, y otra lo que deberías hacer.

--- Respuesta duplicada, perdona Eternal Idol

Última edición por MaxExtreme; 08/11/2007 a las 00:58
  #6 (permalink)  
Antiguo 07/11/2007, 15:59
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Comprendiendo calloc

Siempre encuentro muy útiles sus respuestas. Les agradezco. Soy usuario de este foro desde hace bastante ya, con algunas intermitencias, y he pasado por varios sub foros, desde javascript, asp, hasta ajax o html, y ahora el de C, y existe un factor comun: la ayuda que brindan y la predisposición de cada usuario para responder. Gracias!.

Eternal Idol, no puedo ver el ejemplo que me dejaste, desde donde puedo acceder a el?.
__________________
Add, never Remove
  #7 (permalink)  
Antiguo 07/11/2007, 16:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años, 7 meses
Puntos: 74
Re: Comprendiendo calloc

Cita:
Iniciado por mariano_donati Ver Mensaje
Eternal Idol, no puedo ver el ejemplo que me dejaste, desde donde puedo acceder a el?.
Era solo esto:
Código:
char p[1];
p[740] = 'B';
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 08/11/2007, 07:39
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 9 meses
Puntos: 9
Re: Comprendiendo calloc

Acabo de probar, y efectivamente me genera un error. Me voy a seguir aprendiendo. Saludos!.
__________________
Add, never Remove
  #9 (permalink)  
Antiguo 08/11/2007, 23:18
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 1 mes
Puntos: 52
Re: Comprendiendo calloc

Mmmm. Que no en el link de mi firma viene una explicaciones amplia del tema?

Saludos
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 18:24.