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

¿Fue útil?

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 ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top