给定一个结构,例如
typedef struct
{
int value;
} TestStruct;
为什么以下代码(在IPhone上运行的Objective-C类的上下文中)抛出“未对齐的指针被释放”异常?
TestStruct ts = {33};
free(&ts);
N.B。我的目标是使用具有许多向量数学函数的C库,因此需要找到一些可行的方法来混合C和Objective-C
答案 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()分配的内存上调用。