free_sized
Определено в заголовке <stdlib.h> | ||
|---|---|---|
void free_sized( void* ptr, size_t size ); | (с C23) |
Освобождает память, ранее выделенную с помощью malloc(), calloc(), или realloc() (но не aligned_alloc()).
Параметры
| ptr | - | указатель на память для освобождения |
| size | - | размер ранее переданной памяти функции выделения |
Возвращаемое значение
(нет)
Примечания
Возможная реализация
void free_sized(void* ptr, size_t /*size*/)
{
free(ptr);
}Пример
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
size_t size; // current number of elements
size_t capacity; // reserved number of elements
void** data;
} PtrVector;
PtrVector vector_create(size_t initial_capacity)
{
PtrVector ret =
{
.capacity = initial_capacity,
.data = (void**) malloc(initial_capacity * sizeof(void*))
};
return ret;
}
void vector_delete(PtrVector* self)
{
free_sized(self->data, self->capacity * sizeof(void*));
}
void vector_push_back(PtrVector* self, void* value)
{
if (self->size == self->capacity)
{
self->capacity *= 2;
self->data = (void**) realloc(self->data, self->capacity * sizeof(void*));
}
self->data[self->size++] = value;
}
int main()
{
int data = 42;
float pi = 3.141592f;
PtrVector v = vector_create(8);
vector_push_back(&v, &data);
vector_push_back(&v, &pi);
printf("data[0] = %i\n", *(int*)v.data[0]);
printf("data[1] = %f\n", *(float*)v.data[1]);
vector_delete(&v);
}Вывод:
data[0] = 42 data[1] = 3.141592
Ссылки
- Стандарт C23 (ISO/IEC 9899:2023):
- 7.24.3.4 Функция free_sized
См. также
| освобождает ранее выделенную память (функция) |
|
|
(C23) | освобождает ранее выделенную выровненную память (функция) |
| выделяет память (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/memory/free_sized