| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
damaris006
Registrado: 01 Sep 2007 Mensajes: 1
| Publicado: 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  |
| | Volver arriba | |  | mamntc02
Registrado: 30 Abr 2007 Mensajes: 277
| Publicado: 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:
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
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |