malloc
Aloca os blocos de memória.
Sintaxe
void *malloc(
size_t size
);
Parâmetros
size
Bytes para alocar.
Valor Retornado
malloc
retornará um ponteiro nulo para o espaço alocado ou NULL
se houver memória suficiente disponível. Para retornar um ponteiro para um tipo que não seja o void
, digite a conversão no valor retornado. O espaço de armazenamento apontado pelo valor retornado é garantido para ser sutilmente alinhado para armazenamento de qualquer tipo de objeto que tenha um requisito de alinhamento menor ou igual ao alinhamento fundamental. (No Visual C++, o alinhamento fundamental é o alinhamento necessário para um double
ou 8 bytes. No código que tem como destino plataformas de 64 bits, são ’ 16 bytes.) Use _aligned_malloc
para alocar armazenamento para objetos que têm um requisito de alinhamento maior — , por exemplo, os tipos de SSE __m128
e e __m256
tipos declarados usando __declspec(align( n ))
Where n
é maior que 8. Se size
for 0, malloc
alocará um item de comprimento zero no heap e retornará um ponteiro válido para esse item. Sempre verifique o retorno de malloc
, mesmo que a quantidade de memória solicitada seja pequena.
Comentários
A função malloc
aloca um bloco de memória de, pelo menos, size
bytes. O bloco pode ser maior que size
bytes por causa do espaço necessário para as informações de alinhamento e manutenção.
malloc
definirá errno
como 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 ,, _doserrno
_sys_errlist
e _sys_nerr
.
O código de inicialização usa malloc
para alocar armazenamento para as variáveis _environ
, envp
e argv
. As seguintes funções e suas contrapartes de caractere largo também chamam malloc
.
A _set_new_mode
função C++ define o novo modo de manipulador para malloc
. O novo modo do manipulador indica se, em caso de falha, malloc
deverá 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 ao alocar memória. Você pode substituir esse comportamento padrão para que, quando malloc
falhar ao alocar memória, malloc
chame a nova rotina do manipulador da mesma forma que o operador new
fará quando ele falhar pelo mesmo motivo. Para substituir o padrão, chame _set_new_mode(1)
no início do programa ou vincule com NEWMODE.OBJ
(consulte _set_new_mode(1)
).
Quando o aplicativo é vinculado a uma versão de depuração das bibliotecas de tempo de execução do C, o é malloc
resolvido para _malloc_dbg
. Para obter mais informações sobre como o heap é gerenciado durante o processo de depuração, consulte CRT Debug Heap Details (Detalhes do heap de depuração CRT).
malloc
está marcado como __declspec(noalias)
e __declspec(restrict)
; isto significa que há garantias de que a função não modificará as variáveis globais e que o ponteiro retornado não é um alias. Para obter mais informações, consulte noalias
e restrict
.
Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar isso, consulte estado global no CRT.
Requisitos
Rotina | Cabeçalho necessário |
---|---|
malloc |
<stdlib.h> e <malloc.h> |
Para obter mais informações 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" );
}
}
Memory space allocated for path name
Memory freed