1

假设我有一个包含大型结构的全局变量:

typedef struct {
    char Big[1024]
} LARGE;

static LARGE x;

void main()
{
     free(x);
}

当我不再需要它时,我可以安全地从 main 调用 free(x) 吗?

4

2 回答 2

8

不,您没有动态分配x,因此不需要(也不能)释放它。

如果您绝对需要在程序退出之前释放内存,请将指针声明为全局,按需分配它,使用mallocor calloc,然后free在完成结构时使用它。

static LARGE* x;

void main()
{
    x = malloc(sizeof(*x));
    // use x
    free(x);
}
于 2013-01-20T21:14:22.897 回答
4

不,free只能用于解除分配已通过调用分配的对象malloc

具有静态存储持续时间的对象只能在程序退出时释放。

于 2013-01-20T21:15:23.740 回答