c - 如何释放 C 结构?

标签 c objective-c struct malloc

给定一个结构,例如

typedef struct
{
  int value;
} TestStruct;

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

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

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

最佳答案

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

关于c - 如何释放 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425205/

相关文章:

c - 为什么我的 fork 进程的父进程 pid 与父进程自己的 pid 不同?

c++ - 在类内的结构中定义枚举

c - 为什么我的 C 程序提前关闭?

c - 是否有可能只打印字符串的 1 个字节?

c - 错误: ISO C forbids nested functions - What's wrong?

ios - 从单独的 UIViewController 切换 UITabBarController 选项卡

ios - 配置与 iOS 6 兼容的 iOS 7 应用程序

objective-c - 在哪里设置弹出窗口大小?

C++按字母顺序对结构的 vector 进行排序

c - 在c中使用#define初始化结构体数组