Sdílet prostřednictvím


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 double8 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 __m256typy 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_doserrnoerrno

Spouštěcí kód používá malloc k přidělení úložiště pro _environenvp, 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

Viz také

Přidělení paměti
calloc
free
realloc
_aligned_malloc