4

给定一个结构,例如

typedef struct
{
  int value;
} TestStruct;

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

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

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

4

2 回答 2

25

在我看来,您正在尝试释放堆栈或静态变量。你需要有 malloc()'d 的东西才能让它成为 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);
于 2009-01-08T17:48:48.627 回答
7

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

于 2009-01-08T17:47:53.233 回答