Udostępnij przez


_freea

Cofa przydział lub zwalnia blok pamięci.

Składnia

void _freea(
   void *memblock
);

Parametry

memblock
Wcześniej przydzielony blok pamięci do zwolnienia.

Wartość zwracana

Brak.

Uwagi

Funkcja _freea cofa przydział bloku pamięci (memblock), który został wcześniej przydzielony przez wywołanie metody _malloca. _freea sprawdza, czy pamięć została przydzielona na stercie, czy stosie. Jeśli został przydzielony na stos, _freea nic nie robi. Jeśli został przydzielony na stercie, liczba wolnych bajtów jest równoważna liczbie bajtów żądanych podczas przydzielania bloku. Jeśli memblock wartość to NULL, wskaźnik jest ignorowany i _freea natychmiast zwraca wartość . Próba zwolnienia nieprawidłowego wskaźnika (wskaźnika do bloku pamięci, który nie został przydzielony przez _mallocaprogram ) może mieć wpływ na kolejne żądania alokacji i powodować błędy.

_freea wywołuje free wewnętrznie, jeśli okaże się, że pamięć jest przydzielana na stercie. Niezależnie od tego, czy pamięć znajduje się na stercie, czy stos jest określany przez znacznik umieszczony w pamięci pod adresem bezpośrednio poprzedzającym przydzieloną pamięć.

Jeśli wystąpi błąd podczas zwalniania pamięci, errno jest ustawiany z informacjami z systemu operacyjnego o charakterze awarii. Aby uzyskać więcej informacji, zobacz errno, _doserrno, _sys_errlisti _sys_nerr.

Po zwolnieniu _heapmin bloku pamięci minimalizuje ilość wolnej pamięci na stercie, łącząc nieużywane regiony i zwalniając je z powrotem do systemu operacyjnego. Zwolniona pamięć, która nie została zwolniona w systemie operacyjnym, zostanie przywrócona do bezpłatnej puli i będzie dostępna ponownie do alokacji.

Wywołanie musi towarzyszyć _freea wszystkim wywołaniom metody _malloca. Jest to również błąd wywołania _freea dwukrotnie w tej samej pamięci. Gdy aplikacja jest połączona z wersją debugowania bibliotek czasu wykonywania języka C, szczególnie z funkcjami włączonymi _malloc_dbg przez zdefiniowanie _CRTDBG_MAP_ALLOCmetody , łatwiej jest znaleźć brakujące lub zduplikowane wywołania do _freeaprogramu . Aby uzyskać więcej informacji o sposobie zarządzania stertą podczas procesu debugowania, zobacz Sterta debugowania CRT.

_freea jest oznaczony jako __declspec(noalias), co oznacza, że funkcja nie gwarantuje modyfikowania zmiennych globalnych. W celu uzyskania więcej informacji, zobacz następujący temat: noalias.

Wymagania

Function Wymagany nagłówek
_freea <stdlib.h> i <malloc.h>

Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.

Przykład

Zobacz przykład dla elementu _malloca.

Zobacz też

Alokacja pamięci
_malloca
calloc
malloc
_malloc_dbg
realloc
_free_dbg
_heapmin