free_sized
|
Definido en el encabezado
<stdlib.h>
|
||
|
void
free_sized
(
void
*
ptr,
size_t
size
)
;
|
(desde C23) | |
Libera el espacio previamente asignado por malloc() , calloc() , o realloc() (pero no aligned_alloc() ).
|
Esta sección está incompleta
Razón: compartir redacción entre la familia `free_*` |
free_sized
es seguro para hilos: se comporta como si solo accediera a las ubicaciones de memoria visibles a través de su argumento, y no a ningún almacenamiento estático.
Una llamada a
free_sized
que desasigna una región de memoria
se sincroniza-con
una llamada a cualquier función de asignación posterior que asigne la misma o una parte de la misma región de memoria. Esta sincronización ocurre después de cualquier acceso a la memoria por parte de la función desasignadora y antes de cualquier acceso a la memoria por parte de la función de asignación. Existe un único orden total de todas las funciones de asignación y desasignación que operan sobre cada región particular de memoria.
Contenidos |
Parámetros
| ptr | - | puntero a la memoria para desasignar |
| size | - | tamaño de la memoria previamente pasado a una función de asignación |
Valor de retorno
(ninguno)
Notas
| Esta sección está incompleta |
Implementación posible
Ejemplo
#include <stddef.h> #include <stdio.h> #include <stdlib.h> typedef struct { size_t size; // número actual de elementos size_t capacity; // número reservado de elementos 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); }
Salida:
data[0] = 42 data[1] = 3.141592
Referencias
- Estándar C23 (ISO/IEC 9899:2024):
-
- 7.24.3.4 La función free_sized (p: 365-366)
Véase también
|
desasigna memoria previamente asignada
(función) |
|
|
(C23)
|
desasigna memoria previamente asignada con tamaño y alineación específicos
(función) |
|
asigna memoria
(función) |