_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 _malloca
program ) 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_errlist
i _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_ALLOC
metody , łatwiej jest znaleźć brakujące lub zduplikowane wywołania do _freea
programu . 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. Aby uzyskać więcej informacji, zobacz 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