How to free a C struct?
-
06-07-2019 - |
Question
Given a struct, e.g.
typedef struct
{
int value;
} TestStruct;
Why does the following code (in the context of an Objective-C class running on the IPhone) throw a "non-aligned pointer being freed" exception?
TestStruct ts = {33};
free(&ts);
N.B. My uber goal is to use a C library with many vector-math functions, hence the need to find out some viable way to mix C and Objective-C
Solution
It looks to me like you're trying to free a stack or static variable. You need to have malloc()'d something for it to be able to be free()'d.
Try this instead:
TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);
For those more familiar with object-oriented languages, you might find it helpful to create a constructor:
TestStruct *newTestStruct(int value)
{
TestStruct *ret = malloc(sizeof(TestStruct));
ret->value = value;
return ret;
}
This enables you to allocate a struct and set the values in one step. Just remember that this value should be freed once it's no longer useful:
TestStruct *x = newTestStruct(3);
free(x);
OTHER TIPS
Because you are trying to free something that was allocated on the stack. The function free() can only be called on memory that was allocated with malloc().