malloc
| Definido en el archivo de encabezado <stdlib.h>
|
||
void* malloc( size_t tamaño ); |
||
Asigna determinados bytes de tamaño de almacenamiento no inicializado.
Si la asignación tiene éxito, devuelve un puntero al byte más bajo (el primero) en el bloque de memoria asignado que está alineado adecuadamente para cualquier tipo de objeto con alineación fundamental.
Si el tamaño es cero, el comportamiento está definido en la implementación (el puntero nulo puede ser devuelto, o algún puntero no nulo puede ser devuelto que no puede ser usado para acceder al almacenamiento, pero tiene que ser pasado a free).
|
Una llamada previa a free o realloc que desasigna una región de memoria se sincroniza con una llamada a un malloc que asigna la misma o parte de la misma región de memoria. Esta sincronización se produce después de cualquier acceso a la memoria por parte de la función de desasignación y antes de cualquier acceso a la memoria por parte de |
(desde C11) |
Parametros
| tamaño | - | número de bytes a asignar |
Valor de retorno
En caso de éxito, devuelve el puntero al principio de la nueva memoria asignada. Para evitar una fuga de memoria, el puntero devuelto debe estar desasignado con free() o realloc().
En caso de fallo, devuelve un puntero nulo.
Ejemplo
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int *p1 = malloc(4*sizeof(int)); // asigna suficiente para un arreglo de 4 int
int *p2 = malloc(sizeof(int[4])); // lo mismo, nombrando el tipo directamente
int *p3 = malloc(4*sizeof *p3); // lo mismo, sin repetir el nombre del tipo
if(p1) {
for(int n=0; n<4; ++n) // rellena el arreglo
p1[n] = n*n;
for(int n=0; n<4; ++n) // lo imprime fuera
printf("p1[%d] == %d\n", n, p1[n]);
}
free(p1);
free(p2);
free(p3);
}
Salida:
p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9
Referencias
- Standard C11 (ISO/IEC 9899:2011):
- 7.22.3.4 The malloc function (p: 349)
- Standard C99 (ISO/IEC 9899:1999):
- 7.20.3.3 The malloc function (p: 314)
- Standard C89/C90 (ISO/IEC 9899:1990):
- 4.10.3.3 The malloc function
Véase también
Documentación de C++ para malloc
|