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 double
wartoś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_MAXREQ
wartość . Aby uzyskać informacje o tym i innych kodach błędów, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Kod uruchamiania używa malloc
metody do przydzielenia magazynu dla _environ
zmiennych , envp
i 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