malloc
Asigna bloques de memoria.
Sintaxis
void *malloc(
size_t size
);
Parámetros
size
Bytes para asignar.
Valor devuelto
malloc
devuelve un puntero void al espacio asignado o NULL
si no hay suficiente memoria disponible. Para devolver un puntero a un tipo distinto de void
, use una conversión de tipo en el valor devuelto. El espacio de almacenamiento al que apunta el valor devuelto se alinea adecuadamente para el almacenamiento de cualquier tipo de objeto que tenga un requisito de alineación menor o igual que el de la alineación fundamental. (En Visual C++, la alineación fundamental es la alineación necesaria para un double
o 8 bytes. En el código que tiene como destino plataformas de 64 bits, es de 16 bytes). Use _aligned_malloc
para asignar almacenamiento para los objetos que tienen un requisito de alineación mayor, por ejemplo, los tipos __m128
SSE y __m256
, y los tipos que se declaran mediante donde __declspec(align( n ))
n
es mayor que 8. Si size
es 0, malloc
asigna un elemento de longitud cero en el montón y devuelve un puntero válido para ese elemento. Compruebe siempre el valor devuelto de malloc
, incluso si la cantidad de memoria solicitada es pequeña.
Comentarios
La función malloc
asigna un bloque de memoria de al menos size
bytes. El bloque podría ser mayor que size
bytes debido al espacio necesario para obtener información de alineación y de mantenimiento.
malloc
establece errno
en ENOMEM
si se produce un error de asignación de memoria o si la cantidad de memoria solicitada supera _HEAP_MAXREQ
. Para obtener más información sobre este y otros códigos de error, vea errno
, _doserrno
, _sys_errlist
y _sys_nerr
.
El código de inicio usa malloc
para asignar el almacenamiento para las variables _environ
, envp
y argv
. Las siguientes funciones y sus equivalentes en caracteres anchos también llaman a malloc
.
La función _set_new_mode
de C++ establece el nuevo modo de controlador para malloc
. El nuevo modo de controlador indica si, en caso de error, malloc
va a llamar a la rutina del nuevo controlador, según lo establecido por _set_new_handler
. De forma predeterminada, malloc
no llama a la rutina del nuevo controlador en caso de error al asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando malloc
no pueda asignar memoria, malloc
llame a la rutina del nuevo controlador de la misma forma que hace el operador new
cuando se produce un error por la misma razón. Para invalidar el valor predeterminado, llame _set_new_mode(1)
al principio del programa o vincule con NEWMODE.OBJ
(consulte Opciones de vínculo).
Cuando la aplicación se vincula con una versión de depuración de las bibliotecas en tiempo de ejecución de C, malloc
se resuelve como _malloc_dbg
. Para obtener más información sobre cómo se administra el montón durante el proceso de depuración, consulte Detalles del montón de depuración de CRT.
malloc
está marcado como __declspec(noalias)
y __declspec(restrict)
. Estos atributos significan que se garantiza que la función no modifique las variables globales y que el puntero devuelto no tenga alias. Para obtener más información, vea noalias
y restrict
.
De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.
Requisitos
Routine | Encabezado necesario |
---|---|
malloc |
<stdlib.h> y <malloc.h> |
Para obtener más información sobre compatibilidad, consulte Compatibilidad.
Bibliotecas
Todas las versiones de las bibliotecas en tiempo de ejecución de C.
Ejemplo
// crt_malloc.c
// This program allocates memory with
// malloc, then frees the memory with free.
#include <stdlib.h> // For _MAX_PATH definition
#include <stdio.h>
#include <malloc.h>
int main( void )
{
char *string;
// Allocate space for a path name
string = malloc( _MAX_PATH );
// In a C++ file, explicitly cast malloc's return. For example,
// string = (char *)malloc( _MAX_PATH );
if( string == NULL )
printf( "Insufficient memory available\n" );
else
{
printf( "Memory space allocated for path name\n" );
free( string );
printf( "Memory freed\n" );
}
}
Memory space allocated for path name
Memory freed