free_sized
|
Défini dans l'en-tête
<stdlib.h>
|
||
|
void
free_sized
(
void
*
ptr,
size_t
size
)
;
|
(depuis C23) | |
Libère l'espace précédemment alloué par malloc() , calloc() , ou realloc() (mais pas aligned_alloc() ).
|
Cette section est incomplète
Raison : harmoniser la formulation parmi la famille `free_*` |
free_sized
est sûr pour les threads : il se comporte comme s'il n'accédait qu'aux emplacements de mémoire visibles via son argument, et non à un stockage statique.
Un appel à
free_sized
qui désalloue une région de mémoire
synchronise-avec
un appel à toute fonction d'allocation ultérieure qui alloue la même région ou une partie de la même région de mémoire. Cette synchronisation se produit après tout accès à la mémoire par la fonction de désallocation et avant tout accès à la mémoire par la fonction d'allocation. Il existe un ordre total unique pour toutes les fonctions d'allocation et de désallocation opérant sur chaque région de mémoire particulière.
Table des matières |
Paramètres
| ptr | - | pointeur vers la mémoire à désallouer |
| size | - | taille de la mémoire précédemment passée à une fonction d'allocation |
Valeur de retour
(aucun)
Notes
| Cette section est incomplète |
Implémentation possible
Exemple
#include <stddef.h> #include <stdio.h> #include <stdlib.h> typedef struct { size_t size; // nombre actuel d'éléments size_t capacity; // nombre réservé d'éléments 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); }
Sortie :
data[0] = 42 data[1] = 3.141592
Références
- Norme C23 (ISO/IEC 9899:2024):
-
- 7.24.3.4 La fonction free_sized (p: 365-366)
Voir aussi
|
désalloue la mémoire précédemment allouée
(fonction) |
|
|
(C23)
|
désalloue la mémoire précédemment allouée avec taille et alignement
(fonction) |
|
alloue de la mémoire
(fonction) |