Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to free a C struct?

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

like image 549
Ariel Malka Avatar asked Nov 27 '22 06:11

Ariel Malka


1 Answers

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);
like image 67
Kyle Cronin Avatar answered Dec 15 '22 08:12

Kyle Cronin