free_sized
Defined in header <stdlib.h> | ||
---|---|---|
void free_sized( void* ptr, size_t size ); | (since C23) |
Deallocates the space previously allocated by malloc()
, calloc()
, or realloc()
(but not aligned_alloc()
).
Parameters
ptr | - | pointer to the memory to deallocate |
size | - | size of memory previously passed to an allocation function |
Return value
(none)
Notes
Possible implementation
void free_sized(void* ptr, size_t /*size*/) { free(ptr); }
Example
#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); }
Output:
data[0] = 42 data[1] = 3.141592
References
- C23 standard (ISO/IEC 9899:2023):
- 7.24.3.4 The free_sized function
See also
deallocates previously allocated memory (function) |
|
(C23) | deallocates previously allocated sized and aligned memory (function) |
allocates memory (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/memory/free_sized