malloc
Przydziela bloki pamięci.
void *malloc(
size_t size
);
Parametry
- size
Liczba bajtów do przydzielenia.
Wartość zwracana
Funkcja malloc zwraca pusty wskaźnik do przydzielonego miejsca lub wartość NULL, jeśli dostępna jest niewystarczająca ilość pamięci.Aby zwrócić wskaźnik do typu innego niż void, użyj typu rzutowanego na wartość zwracaną.Przestrzeń przechowywania wskazywana przez wartość zwracaną posiada gwarancję bycia odpowiednio wyrównaną do przechowywania dowolnego typu obiektu, którego wymóg wyrównania jest mniejszy niż lub równy wymogowi dla wyrównania podstawowego. (W programie Visual C++ podstawowe jest wyrównanie, które jest wymagane dla double lub 8 bajtów.W kodzie, który jest przeznaczony dla platform 64-bitowych, to 16 bajtów). Użyj _aligned_malloc do przydzielania pamięci dla obiektów, które mają większe wymagania dotyczące wyrównania — na przykład typy SSE __m128 i __m256oraz typy, które są zadeklarowane za pomocą __declspec(align(n)), gdzie n jest większa niż 8.Jeśli parametr size ma wartość 0, funkcja malloc przydziela element o zerowej długości w stosie i zwraca prawidłowy wskaźnik do tego elementu.Zawsze sprawdzaj zwrot z malloc, nawet jeśli żądana ilość pamięci jest mała.
Uwagi
Funkcja malloc przydziela blok pamięci wielkości co najmniej size bajtów.Blok może być większy niż size bajtów ze względu na miejsce, które jest wymagane do wyrównania i konserwacji informacji.
Funkcja malloc ustawia właściwość errno na ENOMEM, jeśli alokacja pamięci nie powiedzie się lub jeśli żądana ilość pamięci przekracza _HEAP_MAXREQ.Aby uzyskać informacje o tym i innych kodach błędów, zobacz errno, _doserrno, _sys_errlist, and _sys_nerr.
Kod uruchamiający korzysta z malloc do przydzielania pamięci dla zmiennych _environ, envp, i argv.Następujące funkcje i ich odpowiedniki o znakach szerokich również wywołują malloc.
|
|||
|
W języku C++ funkcja _set_new_mode ustawia nowy tryb obsługi dla malloc.Nowy tryb obsługi wskazuje, czy w przypadku awarii, malloc ma wywoływać nową procedurę obsługi zgodnie z ustawieniem _set_new_handler.Domyślnie malloc nie wywołuje nowej procedury obsługi awarii w celu przydzielenia pamięci.Możesz zastąpić to zachowanie domyślne, aby, kiedy malloc nie będzie w stanie przydzielić pamięci, malloc wywoła nową procedurę obsługi w taki sam sposób, jak robi to operator new, gdy ma awarię z tego samego powodu.Aby zastąpić domyślne, wywołaj
_set_new_mode(1)
wcześniej program, lub połącz z NEWMODE.OBJ (zobacz Opcje łącz).
Gdy aplikacja jest połączona z wersji debugowania bibliotek uruchomieniowych C, malloc jest rozpoznawany jako _malloc_dbg.Aby uzyskać więcej informacji na temat sposobu zarządzania stosem podczas debugowania, zobacz Szczegóły dotyczące stosu debugowania CRT.
Funkcja malloc jest oznaczona jako __declspec(noalias) i __declspec(restrict); oznacza to, że funkcja daje gwarancję niemodyfikowania zmiennych globalnych i że zwrócony wskaźnik nie jest aliasem.Aby uzyskać więcej informacji, zobacz noalias i ograniczenie.
Wymagania
Procedura |
Wymagany nagłówek |
---|---|
malloc |
<stdlib.h> i <malloc.h> |
Dodatkowe informacje o zgodności – zobacz: Zgodność.
Biblioteki
Wszystkie wersje Bibliotek uruchomieniowych 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" );
}
}
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardową funkcję C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołań platformy.