Compartir por


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 doubleo 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

Vea también

Asignación de memoria
calloc
free
realloc
_aligned_malloc