【发布时间】:2012-11-03 16:54:15
【问题描述】:
我有一个定义如下的数据结构:
struct varr {
int n; //length of data array
double data[];
};
数据数组的初始大小必须为 1,但允许增加。
为struct varr * 分配空间时,我使用
struct varr *p = malloc(sizeof(struct varr) + sizeof(double));
在重新分配空间以增加我使用的数据数组的大小时
p = realloc(p, sizeof(struct varr) + p->n * sizeof(double));//p->n having already been set
我的问题是“我应该如何释放分配给这个结构的内存?”
我尝试了一个简单的free(p);,但根据 memcheck,这会导致内存泄漏。我为此目的构建数据的方式或分配内存的方式是否存在根本性问题?
==注意==
我通过使用指针而不是显式声明的数组解决了这个问题。但是,我仍然对为什么这不起作用的简明答案感兴趣。
【问题讨论】:
-
@KerrekSB 抱歉 - 这是一个错字。我实际上并没有使用 sizeof(sizeof())。我会编辑。
-
struct poly和struct varr是什么关系? -
varr::n应该是size_t。 -
@KeithRandall:也是一个错字。 KerrekSB 是的 - 但这是 C,而不是 C++
-
@PWhite:如果您正在泄漏内存,您一定是做错了其他事情(例如,如果
realloc像 Kerreb SB 指出的那样失败,则破坏p)。您不需要做任何特别的事情来释放涉及灵活数组成员的内存。malloc/free完全不知道您使用内存的目的。
标签: c malloc dynamic-allocation