给定一个结构,例如

typedef struct
{
  int value;
} TestStruct;

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

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

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

有帮助吗?

解决方案

在我看来,你正试图释放堆栈或静态变量。你需要有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);

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top