Udostępnij za pośrednictwem


malloc

Przydziela bloki pamięci.

Składnia

void *malloc(
   size_t size
);

Parametry

size
Bajty do przydzielenia.

Wartość zwracana

malloc Zwraca wskaźnik void do przydzielonego miejsca lub NULL jeśli jest za mało dostępnej pamięci. Aby zwrócić wskaźnik do typu innego niż void, użyj rzutowania typu na wartość zwracaną. Miejsce do magazynowania wskazywane przez wartość zwracaną jest odpowiednio wyrównane do magazynu dowolnego typu obiektu, który ma wymaganie wyrównania mniejsze niż lub równe wyrównaniu podstawowemu. (W języku Visual C++, podstawowe wyrównanie to wyrównanie wymagane dla doublewartości lub 8 bajtów. W kodzie przeznaczonym dla platform 64-bitowych jest to 16 bajtów). Służy _aligned_malloc do przydzielenia magazynu dla obiektów, które mają większe wymaganie wyrównania — na przykład typy __m128 SSE i __m256, i typy, które są deklarowane przy użyciu __declspec(align( n )) lokalizacji n większej niż 8. Jeśli size wartość to 0, malloc przydziela element o zerowej długości w stercie i zwraca prawidłowy wskaźnik do tego elementu. Zawsze sprawdzaj zwrot z malloc, nawet jeśli żądana ilość pamięci jest niewielka.

Uwagi

Funkcja malloc przydziela blok pamięci co najmniej size bajtów. Blok może być większy niż size bajty ze względu na miejsce wymagane do uzyskania informacji o wyrównaniu i konserwacji.

malloc ustawia wartość errno , ENOMEM jeśli alokacja pamięci nie powiedzie się lub jeśli żądana ilość pamięci przekracza _HEAP_MAXREQwartość . Aby uzyskać informacje o tym i innych kodach błędów, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Kod uruchamiania używa malloc metody do przydzielenia magazynu dla _environzmiennych , envpi argv . Następujące funkcje i ich odpowiedniki o szerokim charakterze również wywołają metodę malloc.

Funkcja języka C++ _set_new_mode ustawia nowy tryb obsługi dla elementu malloc. Nowy tryb obsługi wskazuje, malloc czy w przypadku niepowodzenia należy wywołać nową procedurę obsługi zgodnie z ustawieniem ._set_new_handler Domyślnie malloc nie wywołuje nowej procedury obsługi w przypadku niepowodzenia przydzielenia pamięci. To domyślne zachowanie można zastąpić, aby w przypadku malloc niepowodzenia przydzielenia pamięci malloc wywołać nową procedurę obsługi w taki sam sposób, jak new operator, gdy ulegnie awarii z tego samego powodu. Aby zastąpić wartość domyślną, wywołaj _set_new_mode(1) ją na początku programu lub połącz z elementem NEWMODE.OBJ (zobacz Opcje łącza).

Gdy aplikacja jest połączona z wersją debugowania bibliotek czasu wykonywania języka C, malloc jest rozpoznawana jako _malloc_dbg. Aby uzyskać więcej informacji o sposobie zarządzania stertą podczas procesu debugowania, zobacz szczegóły sterty debugowania CRT.

malloc jest oznaczony i __declspec(noalias) __declspec(restrict). Te atrybuty oznaczają, że funkcja nie ma gwarancji, aby nie modyfikować zmiennych globalnych i że zwrócony wskaźnik nie jest aliasowany. Aby uzyskać więcej informacji, zobacz tematy noalias oraz restrict.

Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.

Wymagania

Procedura Wymagany nagłówek
malloc <stdlib.h> i <malloc.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Biblioteki

Wszystkie wersje bibliotek czasu wykonywania języka C.

Przykład

// 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

Zobacz też

Alokacja pamięci
calloc
free
realloc
_aligned_malloc