# free_sized

From cppreference.com
< c‎ | memory

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

### Parameters

ptr | - | pointer to the memory to deallocate
size | - | size of memory previously passed to an allocation function

### Return value

(none)

### Notes

| This section is incomplete

### Possible implementation

    void free_sized(void* ptr, size_t /*size*/)
    {
        free(ptr);
    }

### 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

### References

- C23 standard (ISO/IEC 9899:2023):

  - 7.24.3.4 The free_sized function

### See also

free | deallocates previously allocated memory (function)
free_aligned_sized (C23) | deallocates previously allocated sized and aligned memory (function)
malloc | allocates memory (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=c/memory/free_sized&oldid=146142"