如何释放C结构?

时间:2009-01-08 17:45:21

标签: c objective-c struct malloc

给定一个结构,例如

typedef struct
{
  int value;
} TestStruct;

为什么以下代码(在IPhone上运行的Objective-C类的上下文中)抛出“未对齐的指针被释放”异常?

TestStruct ts = {33};
free(&ts);

N.B。我的目标是使用具有许多向量数学函数的C库,因此需要找到一些可行的方法来混合C和Objective-C

2 个答案:

答案 0 :(得分:25)

在我看来,你正试图释放堆栈或静态变量。你需要有malloc()'才能使它成为free()'d。

请改为尝试:

TestStruct *ts = malloc(sizeof(TestStruct));
ts->value = 33;
free(ts);

对于那些更熟悉面向对象语言的人,您可能会发现创建构造函数很有帮助:

TestStruct *newTestStruct(int value)
{
    TestStruct *ret = malloc(sizeof(TestStruct));
    ret->value = value;
    return ret;
}

这使您可以分配结构并一步设置值。请记住,一旦它不再有用,就应该释放这个值:

TestStruct *x = newTestStruct(3);
free(x);

答案 1 :(得分:7)

因为你试图释放在堆栈上分配的东西。函数free()只能在使用malloc()分配的内存上调用。