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 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 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 malloc
metody , 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_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 metody malloc
do przydzielenia magazynu dla _environ
zmiennych , envp
i 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