Sdílet prostřednictvím


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.

calloc

fscanf

_getw

setvbuf

Funkce _exec

fseek

_popen

_spawn functions

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

systém

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

vloží

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

gets

_searchenv

 

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.

Viz také

Referenční dokumentace

Přidělení paměti

calloc

free

realloc

_aligned_malloc