malloc

Przydziela bloki pamięci.

Składnia

void *malloc(
   size_t size
);

Parametry

size
Bajty do przydzielenia.

Wartość zwracana

malloc zwraca wskaźnik pustki do przydzielonego miejsca lub NULL jeśli jest niewystarczająca ilość 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 przechowywania 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 przydzielania magazynu dla obiektów, które mają większe wymaganie wyrównania — na przykład typy __m128 SSE i __m256, i typy zadeklarowane 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 mallocmetody , nawet jeśli żądana ilość pamięci jest mała.

Uwagi

Funkcja malloc przydziela blok pamięci co najmniej size bajtów. Blok może być większy niż size bajty z powodu miejsca wymaganego do wyrównania i informacji o konserwacji.

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

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

Funkcja 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 malloc przypadku 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 polecenie _set_new_mode(1) na początku programu lub połącz się z NEWMODE.OBJ (zobacz Opcje linku).

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 na temat sposobu zarządzania stertą podczas procesu debugowania, zobacz Szczegóły sterty debugowania CRT.

malloc jest oznaczony __declspec(noalias) i __declspec(restrict). Te atrybuty oznaczają, że funkcja nie ma gwarancji modyfikowania zmiennych globalnych i że zwracany wskaźnik nie jest aliasowany. Aby uzyskać więcej informacji, zobacz noalias i 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 uruchomieniowych 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 także

Alokacja pamięci
calloc
free
realloc
_aligned_malloc