malloc
Alloca blocchi di memoria.
Sintassi
void *malloc(
size_t size
);
Parametri
size
Byte da allocare.
Valore restituito
malloc
restituisce un puntatore void allo spazio allocato o NULL
se è disponibile memoria insufficiente. Per restituire un puntatore a un tipo diverso da void
, usare un cast del tipo sul valore restituito. Lo spazio di archiviazione a cui punta il valore restituito è allineato in modo adeguato per l'archiviazione di qualsiasi tipo di oggetto con un requisito di allineamento minore o uguale a quello dell'allineamento fondamentale. In Visual C++, l'allineamento fondamentale è l'allineamento necessario per un double
oggetto o 8 byte. Nel codice destinato a piattaforme a 64 bit, si tratta di 16 byte. Usare _aligned_malloc
per allocare l'archiviazione per gli oggetti con un requisito di allineamento più ampio, ad esempio i tipi __m128
SSE e __m256
e i tipi dichiarati usando __declspec(align( n ))
dove n
è maggiore di 8. Se size
è 0, malloc
alloca un elemento di lunghezza zero nell'heap e restituisce un puntatore valido a tale elemento. Controllare sempre il valore restituito da malloc
, anche se la quantità di memoria richiesta è limitata.
Osservazioni:
La funzione malloc
alloca un blocco di memoria di almeno size
byte. Il blocco può essere maggiore di size
byte a causa dello spazio necessario per le informazioni sull'allineamento e la manutenzione.
malloc
imposta errno
su ENOMEM
se un'allocazione di memoria ha esito negativo o se la quantità di memoria richiesta supera _HEAP_MAXREQ
. Per informazioni su questo e altri codici di errore, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Il codice di avvio usa malloc
per allocare spazio di archiviazione per le variabili _environ
, envp
e argv
. Anche le funzioni seguenti e le relative controparti a caratteri wide chiamano malloc
.
La funzione C++ _set_new_mode
imposta la nuova modalità del gestore per malloc
. La nuova modalità del gestore indica se, in caso di errore, malloc
deve chiamare la routine del nuovo gestore come impostato da _set_new_handler
. Per impostazione predefinita, malloc
non chiama la nuova routine del gestore in caso di errore di allocazione della memoria. È possibile eseguire l'override di questo comportamento predefinito in modo che, quando malloc
non riesce ad allocare memoria, malloc
chiami la routine del nuovo gestore, come fa l'operatore new
quando non riesce per lo stesso motivo. Per eseguire l'override dell'impostazione predefinita, chiamare _set_new_mode(1)
all'inizio del programma o collegarsi a NEWMODE.OBJ
(vedere Opzioni di collegamento).
Quando l'applicazione è collegata a una versione di debug delle librerie di runtime C, malloc
viene risolto in _malloc_dbg
. Per altre informazioni sulla gestione dell'heap durante il processo di debug, vedere Dettagli dell'heap di debug CRT.
malloc
è contrassegnato e __declspec(noalias)
__declspec(restrict)
. Questi attributi indicano che la funzione non modifica le variabili globali e che il puntatore restituito non è aliasato. Per altre informazioni, vedere noalias
e restrict
.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.
Requisiti
Ciclo | Intestazione obbligatoria |
---|---|
malloc |
<stdlib.h> e <malloc.h> |
Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Librerie
Tutte le versioni delle librerie di runtime C.
Esempio
// 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