¿Cómo liberar una estructura C?
-
06-07-2019 - |
Pregunta
Dada una estructura, por ejemplo
typedef struct
{
int value;
} TestStruct;
¿Por qué el siguiente código (en el contexto de una clase de Objective-C que se ejecuta en el iPhone) lanza un " puntero no alineado siendo liberado " ¿excepción?
TestStruct ts = {33};
free(&ts);
N.B. Mi objetivo principal es usar una biblioteca de C con muchas funciones vectoriales-matemáticas, de ahí la necesidad de encontrar alguna forma viable de mezclar C y Objective-C
Solución
Me parece que estás intentando liberar una pila o una variable estática. Necesitas tener malloc () 'd para que pueda ser libre ()' d.
Prueba esto en su lugar:
TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);
Para aquellos que están más familiarizados con los lenguajes orientados a objetos, puede resultarle útil crear un constructor:
TestStruct *newTestStruct(int value)
{
TestStruct *ret = malloc(sizeof(TestStruct));
ret->value = value;
return ret;
}
Esto le permite asignar una estructura y establecer los valores en un solo paso. Solo recuerda que este valor debe liberarse una vez que ya no sea útil:
TestStruct *x = newTestStruct(3);
free(x);
Otros consejos
Porque estás intentando liberar algo que fue asignado en la pila. La función free () solo se puede llamar en la memoria asignada con malloc ().