free_sized
From cppreference.com
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()).
This section is incomplete Reason: share wording among `free_*` family |
Contents |
[edit] Parameters
ptr | - | pointer to the memory to deallocate |
size | - | size of memory previously passed to an allocation function |
[edit] Return value
(none)
[edit] Notes
This section is incomplete |
[edit] Possible implementation
[edit] Example
Run this code
#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
[edit] References
- C23 standard (ISO/IEC 9899:2023):
- 7.24.3.4 The free_sized function
[edit] See also
deallocates previously allocated memory (function) | |
(C23) |
deallocates previously allocated sized and aligned memory (function) |
allocates memory (function) |