给定一个结构体,例如:
typedef struct
{
int value;
} TestStruct;
以下代码(在iPhone上运行的Objective-C类的上下文中)为什么会抛出“非对齐指针被释放”异常?
TestStruct ts = {33};
free(&ts);
注意:我的终极目标是使用一个包含许多向量数学函数的C库,因此需要找到一种可行的方法来混合C和Objective-C。
给定一个结构体,例如:
typedef struct
{
int value;
} TestStruct;
TestStruct ts = {33};
free(&ts);
注意:我的终极目标是使用一个包含许多向量数学函数的C库,因此需要找到一种可行的方法来混合C和Objective-C。
我看你似乎尝试释放一个栈或静态变量。你需要使用malloc()分配内存才能使用free()释放。
尝试使用以下方法:
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()分配的内存。