Condividi tramite


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.

calloc

fscanf

_getw

setvbuf

funzioni _exec

fseek

_popen

funzioni _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

ottiene

_searchenv

 

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.

Vedere anche

Riferimenti

Allocazione di memoria

calloc

disponibili

realloc

_aligned_malloc