Udostępnij za pośrednictwem


funkcja malloc

Przydziela bloków pamięci.

void *malloc(
   size_t size 
);

Parametry

  • size
    Liczba bajtów przydzielić.

Wartość zwracana

mallocZwraca void wskaźnik do miejsca przydzielonego lub NULL , jeśli dostępna jest za mało pamięci.Aby przywrócić wskaźnika typu innego niż void, użyj typu oddanych na wartości zwracanej.Miejsca wskazywanego przez wartość zwracana jest gwarantowane zostały odpowiednio dostosowane do przechowywania dowolnego typu obiektu.Jeśli rozmiar jest równy 0, malloc przydziela element o zerowej długości w stercie, a następnie zwraca prawidłowego wskaźnika do tego elementu.Zawsze sprawdzaj powrotu z malloc, nawet jeśli ilość pamięci wymagane jest mała.

Uwagi

malloc Funkcja alokuje blok pamięci, co najmniej size bajtów.Blok może być większy od size bajtów z powodu miejsce wymagane informacje o wyrównanie i konserwacji.

mallocUstawia errno do ENOMEM Jeśli alokacja pamięci nie powiedzie się lub jeśli żądana ilość pamięci, przekracza _HEAP_MAXREQ.Aby uzyskać informacje na temat tego i innych kodów błędów, zobacz errno, _doserrno, _sys_errlist i _sys_nerr.

Używa kodu startowego malloc przydzielić pamięć dla _environ, envp, i argv zmiennych.Następujące funkcje i ich odpowiednikami szerokich znaków również wywołać malloc:

calloc

fscanf — przetwarza dane

_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

umieszcza

inne problemy

_fputchar

_getcwd

_putw

vprintf

fputs

_getdcwd

scanf

 

fread

pobiera

_searchenv

 

C++ _set_new_mode funkcja ustawia nowy tryb obsługi dla malloc.Nowy tryb obsługi wskazuje, czy w przypadku awarii, malloc jest wywołanie procedury obsługi nowych określone przez _set_new_handler.Domyślnie malloc nie wywołuje nowe procedury obsługi na nie można przydzielić pamięci.Można zastąpić to zachowanie domyślne tak, aby, gdy malloc nie można przydzielić pamięci, malloc wywołuje nowe procedury obsługi w taki sam sposób new operator wykonuje, gdy go nie powiedzie się z tego samego powodu.Aby zastąpić ustawienia domyślne, zadzwoń

_set_new_mode(1)

wczesnym etapie programu lub łącze z NEWMODE.OBJ (see Opcje łącza).

Gdy aplikacja jest połączony z debugowania wersją biblioteki uruchomieniowej C, malloc jest rozpoznawany jako _malloc_dbg.Aby uzyskać więcej informacji na temat jak sterty jest zarządzany w trakcie debugowania, zobacz The CRT debugowania sterty.

mallocjest oznaczony jako __declspec(noalias) i __declspec(restrict), co oznacza, że funkcja zagwarantowane jest nie do modyfikacji zmiennych globalnych, i że zwrócony wskaźnik nie jest aliasu.Aby uzyskać więcej informacji, zobacz noalias i ograniczyć.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

malloc

<stdlib.h> i <malloc.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Biblioteki

Wszystkie wersje biblioteki uruchomieniowej 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ć standardowych funkcji 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

odśmiecacz