malloc
Přidělí paměťové bloky.
Syntaxe
void *malloc(
size_t size
);
Parametry
size
Bajty, které se mají přidělit
Vrácená hodnota
malloc
vrátí ukazatel void na přidělený prostor nebo NULL
pokud není k dispozici dostatek paměti. Pokud chcete vrátit ukazatel na jiný typ než void
, použijte přetypování typu na návratovou hodnotu. Prostor úložiště, na který odkazuje návratová hodnota, je vhodně zarovnán pro uložení libovolného typu objektu, který má požadavek na zarovnání menší nebo roven základnímu zarovnání. (V jazyce Visual C++ je základní zarovnání požadované pro double
8 bajtů. V kódu, který cílí na 64bitové platformy, je to 16 bajtů.) Slouží _aligned_malloc
k přidělení úložiště pro objekty, které mají větší požadavek na zarovnání – například typy __m128
SSE a __m256
typy deklarované pomocí místa __declspec(align( n ))
, kde n
je větší než 8. Pokud size
je 0, malloc
přidělí položku nulové délky v haldě a vrátí platný ukazatel na tuto položku. Vždy zkontrolujte návrat z malloc
, i když je požadovaná velikost paměti malá.
Poznámky
Funkce malloc
přidělí blok paměti alespoň size
bajtů. Blok může být větší než size
bajty kvůli prostoru, který je nutný pro informace o zarovnání a údržbě.
malloc
nastaví errno
, ENOMEM
pokud přidělení paměti selže nebo pokud požadovaná velikost paměti překročí _HEAP_MAXREQ
. Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
Spouštěcí kód používá malloc
k přidělení úložiště pro _environ
envp
, a argv
proměnné. Následující funkce a jejich širokoúhlé protějšky také volají malloc
.
Funkce C++ _set_new_mode
nastaví nový režim obslužné rutiny pro malloc
. Nový režim obslužné rutiny označuje, zda při selhání malloc
je volání nové rutiny obslužné rutiny nastavena ._set_new_handler
Ve výchozím nastavení nevolá rutinu nové obslužné rutiny při malloc
selhání přidělení paměti. Toto výchozí chování můžete přepsat tak, aby při malloc
selhání přidělení paměti malloc
volaly novou rutinu obslužné rutiny stejným způsobem jako new
operátor v případě selhání z stejného důvodu. Pokud chcete výchozí nastavení přepsat, zavolejte _set_new_mode(1)
v rané fázi programu nebo odkazujte na NEWMODE.OBJ
odkaz (viz možnosti odkazu).
Pokud je aplikace propojena s ladicí verzí knihoven runtime jazyka C, malloc
přeloží na _malloc_dbg
. Další informace o správě haldy během procesu ladění najdete v podrobnostech haldy ladění CRT.
malloc
je označen a __declspec(noalias)
__declspec(restrict)
. Tyto atributy znamenají, že funkce nemůže upravovat globální proměnné a že vrácený ukazatel není aliasovaný. Další informace najdete v tématech noalias
a restrict
.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
malloc |
<stdlib.h> a <malloc.h> |
Další informace o kompatibilitě najdete v tématu Kompatibilita.
Knihovny
Všechny verze knihoven runtime jazyka C.
Příklad
// 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