Compartilhar via


malloc

Atribui blocos de memória.

void *malloc(
   size_t size 
);

Parâmetros

  • size
    Bytes para alocar.

Valor de retorno

malloc retorna um ponteiro nulo para o espaço alocado ou NULL se houver memória insuficiente disponível. Para retornar um ponteiro para um tipo diferente void, use uma conversão de tipo no valor de retorno. O espaço de armazenamento apontado pelo valor de retorno é garantido para ser alinhado corretamente para o armazenamento de qualquer tipo de objeto que tem um requisito de alinhamento menor ou igual ao de alinhamento fundamental. (No Visual C++, alinhamento fundamental é o alinhamento que é necessário para double, ou 8 bytes. No código que se destina a plataformas de 64 bits, é de 16 bytes). Use _aligned_malloc para atribuir o armazenamento para os objetos que possuem um requisito de alinhamento maior, por exemplo, os tipos SSE __m128 e __m256, e os tipos que são declarados usando __declspec(align(n)) onde n é maior que 8. Se size for 0, malloc alocará um item de comprimento zero no heap e retornará um ponteiro válido naquele item. Sempre verifique o retorno de malloc, mesmo se a quantidade de memória solicitada for pequena.

Comentários

A função malloc atribui um bloco de memória de pelo menos size bytes. O bloco pode ser maior do que size bytes devido ao espaço necessário para informações de alinhamento e manutenção.

malloc define errno a ENOMEM se uma alocação de memória falhar ou se a quantidade de memória solicitada exceder _HEAP_MAXREQ. Para obter informações sobre esse e outros códigos de erro, consulte errno, _doserrno, _sys_errlist e _sys_nerr.

O código de inicialização usa malloc para atribuir o armazenamento de _environ, envp, e variáveis de argv . As funções a seguir e suas contrapartes de caracteres largos também chamam malloc.

calloc

fscanf

_getw

setvbuf

funções de _exec

fseek

_popen

funções de _spawn

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

sistema

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

gets

_searchenv

 

A função C++ _set_new_mode define o novo modo do manipulador para malloc. O novo modo de manipulador indica se, em caso de falha, malloc deve chamar a nova rotina do manipulador conforme definido por _set_new_handler. Por padrão, malloc não chama a nova rotina do manipulador em caso de falha para alocar memória. Você pode substituir esse comportamento padrão para que, quando malloc não aloca memória, malloc chama a nova rotina de manipulador da mesma forma que o operador de new faz quando falha pela mesma razão. Para substituir o padrão, chame

_set_new_mode(1)

no início do seu programa, ou no link com NEWMODE.OBJ (consulte Opções de link).

Quando o aplicativo é associado com uma versão de depuração das bibliotecas em tempo de execução de C, malloc resolve a _malloc_dbg. Para obter mais informações sobre como o heap é gerenciado durante o processo de depuração, consulte Detalhes da pilha de depuração CRT.

malloc está marcado como __declspec(noalias) e __declspec(restrict); isso significa que é garantido que a função não alterará variáveis globais e que o ponteiro retornado não terá um alias. Para obter mais informações, consulte noalias e restrict.

Requisitos

Rotina

Cabeçalho necessário

malloc

<stdlib.h> e <malloc.h>

Para obter informações adicionais sobre compatibilidade, consulte Compatibilidade.

Bibliotecas

Todas as versões das Bibliotecas em tempo de execução C.

Exemplo

// 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" );
   }
}
  

Equivalência do .NET Framework

Não aplicável. Para chamar a função padrão de C, use PInvoke. Para obter mais informações, consulte Exemplos de invocação de plataforma.

Consulte também

Referência

Alocação de memória

calloc

free

realloc

_aligned_malloc