Udostępnij za pośrednictwem


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.

calloc

fscanf

_getw

setvbuf

Funkcje _exec

fseek

_popen

Funkcje _spawn

fgetc

fsetpos

printf

_strdup

_fgetchar

_fullpath

putc

system

fgets

fwrite

putchar

_tempnam

fprintf

getc

_putenv

ungetc

fputc

getchar

puts

vfprintf

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

gets

_searchenv

 

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.

Zobacz też

Informacje

Alokacja pamięci

calloc

free

realloc

_aligned_malloc