Compartir a través de


malloc

Asigna bloques de memoria.

void *malloc(
   size_t size 
);

Parámetros

  • size
    Bytes a asignar.

Valor devuelto

malloc devuelve un puntero void al espacio asignado, o NULL si no hay disponible memoria suficiente. Para devolver un puntero a un tipo distinto de void, utilice una conversión de tipo en el valor devuelto. El espacio de almacenamiento apuntado por el valor devuelto se garantiza para que se alinee adecuadamente para el almacenamiento de cualquier tipo de objeto que tiene un requisito de alineación inferior o igual al de la alineación fundamental. (En Visual C++, la alineación fundamental es la alineación necesaria para double u 8 bytes. En el código destinado a plataformas de 64 bits, son 16 bytes). Use _aligned_malloc para asignar espacio de almacenamiento para los objetos que tienen un requisito de alineación mayor, por ejemplo, los tipos SSE __m128 y __m256, y los tipos que se declaran con __declspec(align(n)), donde 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 a ese elemento. Compruebe siempre lo que devuelve malloc, aunque la cantidad de memoria solicitada sea pequeña.

Comentarios

La función malloc asigna un bloque de memoria de al menos size bytes. Puede que el bloque tenga más de size bytes debido al espacio necesario para la información de mantenimiento y alineación.

malloc establece errno en ENOMEM si se produce un error al asignar una 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 de las variables _environ, envp y argv. Las siguientes funciones y sus equivalentes de caracteres anchos también llaman a malloc.

calloc

fscanf

_getw

setvbuf

Funciones _exec

fseek

_popen

Funciones _spawn

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

sistema

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

coloca

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

obtiene

_searchenv

 

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 debe llamar a la nueva rutina de controlador como se establece por _set_new_handler. De forma predeterminada, malloc no llama a la nueva rutina del controlador si no se puede asignar memoria. Puede invalidar este comportamiento predeterminado para que, cuando malloc no puede asignar memoria, malloc llama a la nueva rutina de controlador de la misma manera que hace el operador new cuando produce errores por la misma razón. Para reemplazar el valor predeterminado, llame

_set_new_mode(1)

al principio del programa, o vincularlo con NEWMODE.OBJ (vea Opciones de vínculo).

Cuando la aplicación está vinculada con una versión de depuración de las bibliotecas en tiempo de ejecución de C, malloc se resuelve en _malloc_dbg. Para obtener más información sobre cómo se administra el montón durante el proceso de depuración, vea Detalles del montón de depuración de CRT.

malloc se marca como __declspec(noalias) y __declspec(restrict); esto significa que hay garantías de que la función no modifica variables globales y de que no se ha creado un alias para el puntero devuelto. Para obtener más información, vea noalias y restrict.

Requisitos

Rutina

Encabezado necesario

malloc

<stdlib.h> y <malloc.h>

Para obtener información adicional de compatibilidad, vea 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" );
   }
}
  

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, use PInvoke. Para obtener más información, vea Ejemplos de invocación de plataforma.

Vea también

Referencia

Asignación de memoria

calloc

free

realloc

_aligned_malloc