给定一个结构,例如

typedef struct
{
  int value;
} TestStruct;

为什么下面的代码(在iphone上运行的objective-c类的上下文中)会抛出“不对齐指针被释放”异常?
TestStruct ts = {33};
free(&ts);

注意:我的uber目标是使用一个带有许多向量数学函数的c库,因此需要找到一些可行的方法来混合c和objective-c

最佳答案

在我看来,你试图释放一个堆栈或静态变量。你需要有一个malloc()的东西才能让它自由。
请改为:

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);

08-17 23:29