From 754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Sun, 7 Apr 2024 13:41:34 -0500 Subject: new repository --- devdocs/c/memory%2Ffree_sized.html | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 devdocs/c/memory%2Ffree_sized.html (limited to 'devdocs/c/memory%2Ffree_sized.html') diff --git a/devdocs/c/memory%2Ffree_sized.html b/devdocs/c/memory%2Ffree_sized.html new file mode 100644 index 00000000..36a5ad8f --- /dev/null +++ b/devdocs/c/memory%2Ffree_sized.html @@ -0,0 +1,70 @@ +

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

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 +

+
-- cgit v1.2.3