malloc
Alloca i blocchi di memoria.
void *malloc(
size_t size
);
Parametri
- size
Byte da allocare.
Valore restituito
malloc restituisce un puntatore a void allo spazio allocato o a NULL se la memoria disponibile non è sufficiente. Per restituire un puntatore a un tipo diverso da void, utilizzare un cast di tipo sul valore restituito. Dello spazio di archiviazione puntato in base al valore restituito è garantito l'adeguato allineamento per l'archiviazione di qualsiasi tipo di oggetto che contiene un requisito di allineamento minore o uguale a quello dell'allineamento fondamentale. In Visual C++ l'allineamento fondamentale è l'allineamento richiesto per double o 8 byte. Nel codice destinato a piattaforme a 64 bit, è 16 byte. Utilizzare _aligned_malloc per allocare lo spazio di archiviazione per oggetti con requisiti di allineamento maggiori, ad esempio i tipi SSE __m128 e __m256 e i tipi dichiarati utilizzando __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 per l'elemento. Verificare sempre il ritorno da malloc, anche se la quantità di memoria richiesta è poca.
Note
La funzione malloc alloca un blocco di memoria di almeno size byte. Il blocco può essere maggiore di size byte a causa dello spazio richiesto per le informazioni di manutenzione e di allineamento.
malloc imposta errno a ENOMEM se un'allocazione della memoria fallisce o se la quantità di memoria richiesta supera _HEAP_MAXREQ. Per informazioni su questo e altri codici di errore, vedere errno, _doserrno, _sys_errlist, and _sys_nerr.
Il codice di avvio utilizza malloc per allocare la memoria per le variabili _environ, envpe argv. Le seguenti funzioni e anche le relative controparti a caratteri estesi chiamano malloc.
|
|||
|
La funzione C++ _set_new_mode imposta la nuova modalità di gestione per malloc. La nuova modalità del gestore indica se, in caso di errore, malloc deve richiamare la nuova routine del gestore come imposto da _set_new_handler. Per impostazione predefinita, malloc non richiama la nuova routine di gestione in caso di errore nell'allocare memoria. È possibile eseguire l'override di questo comportamento predefinito affinché, quando malloc non riesce ad allocare memoria, malloc chiami la nuova routine del gestore allo stesso modo di come avviene con l'operatore new quando si verifica il medesimo errore. Per eseguire l'override del comportamento predefinito, chiamare
_set_new_mode(1)
all'inizio del programma, o collegare con NEWMODE.OBJ (vedere Opzioni collegamento).
Quando l'applicazione viene collegata a una versione di debug delle librerie di runtime del linguaggio C, malloc viene identificato come _malloc_dbg. Per ulteriori informazioni su come viene gestito l'heap durante il processo di debug, vedere Informazioni dettagliate sull'heap di debug CRT.
malloc è contrassegnata in __declspec(noalias) e __declspec(restrict), pertanto la funzione garantisce che le variabili globali non vengono modificate, e che il puntatore restituito è già utilizzato. Per ulteriori informazioni, vedere noalias e restrict.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
malloc |
<stdlib.h> e <malloc.h> |
Per ulteriori informazioni sulla compatibilità, vedere 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" );
}
}
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di platform invoke.