Condividi tramite


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 doubleoggetto 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 __m256e 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_errliste _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

Vedi anche

Allocazione di memoria
calloc
free
realloc
_aligned_malloc