/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Funcion malloc en punteros

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
damaris006



Registrado: 01 Sep 2007
Mensajes: 1

MensajePublicado: 26/11/2007 6:30 am
Título: Funcion malloc en punteros

hola, espero alguien me pueda ayudar, tengo la siguiente linea de un programa de punteros, donde lista es una variable definida como apuntador de tipo int y N es variable de tipo int tambien.
quisiera saber para que me sirve la funcion malloc y sizeof

lista = (int*)malloc(N*sizeof(int));

gracias anticipadas Wink
Volver arriba
mamntc02



Registrado: 30 Abr 2007
Mensajes: 277

MensajePublicado: 26/11/2007 7:32 am
Título:

Hola,

  • malloc() y calloc(), reservan dinámicamente (es decir, en tiempo de ejecución) una cantidad de memoria. La sentencia es equivalente a:
Código:
int lista[N];
en cuanto a uso más práctico. No obstante, la diferencia es muy importante. Mientras usando malloc se reserva memoria dinámicamente, mediante un array se reserva estáticamente. En otras palabras, usando arrays, al compilar el programa éste ya sabe cuanta memoria debe reservar, y al arranca el programa, dicha memória ya está disponible. malloc() y calloc() sirven para cuando desconoces cuanto espacio necesitas reservar, cuando estás programando.
  • sizeof() es un operador q devuelve lo q ocupa un tipo de dato en memoria. En tu instrucción:
  • Código:
    lista = (int *)malloc(N*sizeof(int));

    sizeof(int), devuelve cuanto ocupa un 'int' en memoria.
    malloc(N*sizeof(int)). Reserva la cantidad de memoria N*sizeof(int), es decir, lo q ocupan N 'int', y devuelve un puntero a void.
    Luego debemos hacerle un cast al tipo de la variable. En este caso, un puntero a int. Esto es necesario pq malloc desconoce el tipo de dato al q apunta, él sólo reserva espacio, pero nada más.
    Saludos
    Volver arriba
    rir3760



    Registrado: 01 Oct 2004
    Mensajes: 3837
    Ubicación: Mexico

    MensajePublicado: 26/11/2007 9:44 am
    Título:

    Solo para redondear el tema:

    * En el caso de C++ debido a su manejo mas estricto de tipos la conversion explicita al tipo "int *" es obligatoria y no incuirla seria un error, por otra parte en este lenguaje lo usual es utilizar su idioma (el par new + delete).

    * En el caso del lenguaje C esta conversion es opcional y, mas todavia, no se recomienda su uso.

    En este lenguaje el idioma o convencion informal para reservar un bloque de memoria del tamaño suficiente para almacenar "N" elementos de tipo "T" es:
    Código:
    T *p;

    /* ... */

    p = malloc(N * sizeof *p);

    Utilizar "sizeof *p" en lugar de "sizeof(T)" tiene la ventaja de que si se cambia el tipo apuntado (por ejemplo de int a short/long) esa sentencia no tiene que modificarse lo que si seria necesario en el caso de indicar el tipo directamente con (siguiendo el ejemplo) "sizeof(int)".

    Un saludo
    _________________
    The capacity to learn is a gift;
    The ability to learn is a skill;
    The willingness to learn is a choice.
    --
    Rebec of Ginaz
    Volver arriba
          Índice del Foro elrincondelc.com -> Principiantes C/C++
    Página 1 de 1Todas las horas están en GMT - 8 Horas

     
    No puede crear mensajes
    No puede responder temas
    No puede editar sus mensajes
    No puede borrar sus mensajes
    No puede votar en encuestas

    (c) ElRincondelC.com

    Un proyecto de UrlanHeat.com