malloc
Přidělí bloky paměti.
void *malloc(
size_t size
);
Parametry
- size
Počet bajtů k přidělení.
Vrácená hodnota
malloc vrací neplatný ukazatel do přiděleného místa nebo NULL, pokud není k dispozici dostatek paměti.Chcete-li ukazatel vrátit na jiný typ než void, použijte přetypování typu na hodnotě vrácení.Úložný prostor odkazovaný hodnotou return je zaručen jako vhodně zarovnaný pro úložiště libovolného typu objektu, který má požadavek na zarovnání nižší než nebo rovný požadavku na základní zarovnání. (V jazyce Visual C++ je základní zarovnáním zarovnání, které je vyžadováno pro double nebo 8 bajtů.V kódu, který se zaměřuje na 64bitové platformy je 16 bajtový.) Použijte _aligned_malloc pro přidělení úložiště objektům, které mají větší požadavek na zarovnání – například typy SSE __m128 a __m256 a typy deklarované pomocí __declspec(align(n)), kde n je větší než 8.Pokud size je 0, malloc přiděluje 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 velikost požadované paměti malá.
Poznámky
Funkce malloc alokuje blok paměti velikosti alespoň size bajtů.Blok může být větší než size bajtů z důvodu místa požadovaného pro informace o zarovnání a údržbě.
malloc nastaví errno na ENOMEM při selhání přidělení paměti, nebo pokud velikost paměti je větší než _HEAP_MAXREQ.Další informace o tomto a dalších chybových kódech naleznete v tématu errno, _doserrno, _sys_errlist, and _sys_nerr.
Spouštěcí kód používá malloc k přidělení úložiště pro proměnné _environ, envp a argv.Následující funkce a jejich protějšky s širokými znaky také volají malloc.
|
|||
|
Funkce C++ _set_new_mode nastaví nový režim obslužné rutiny pro malloc.Nový režim obslužné rutiny určuje, zda je při selhání malloc je nastavena tak, že bude volat nové rutiny ovladače podle _set_new_handler.Ve výchozím nastavení nevolá malloc nové rutiny obsluhy při selhání přidělení paměti.Toto výchozí chování můžete přepsat tak, aby, když selže přidělování paměti modulem malloc volal malloc novou rutinu ovladače stejným způsobem jako operátor new, když ze stejného důvodu selže.Pro přepis výchozího chování volejte
_set_new_mode(1)
zpočátku v programu nebo propojení s NEWMODE.OBJ (viz Možnosti odkazů).
Pokud je aplikace spojena s ladicí verze knihoven C run-time, malloc se přeloží na _malloc_dbg.Další informace o tom, jak je spravována halda během procesu ladění, naleznete v tématu Podrobnosti haldy ladění CRT.
malloc je označen jako __declspec(noalias) a __declspec(restrict); to znamená, že funkce neupraví globální proměnné a pro vrácený ukazatel není alias.Další informace naleznete v tématu noalias a restrict.
Požadavky
Rutina |
Požadované záhlaví |
---|---|
malloc |
<stdlib.h> a <malloc.h> |
Další informace o kompatibilitě naleznete v tématu Kompatibilita.
Knihovny
Všechny verze běhových knihoven 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" );
}
}
Ekvivalent v rozhraní .NET Framework
Nelze použít. Pokud chcete volat standardní funkci jazyka C, použijte PInvoke. Další informace naleznete v tématu Příklady vyvolání platformy.