传递由malloc分配的空间的指针

时间:2011-05-30 22:38:11

标签: c memory malloc free parameter-passing

我刚刚写了一个函数,它返回一个指向malloc分配的内存块的指针。如果我在返回的指针上调用free(),它会释放内存吗?

我试着读一下这个,但我找不到任何说明你是否可以调用指向同一位置的不同指针,以及是否会释放所有内存。

这可能是主要的基础,我想我找不到信息,因为我正在寻找错误。

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

是的,调用free将释放内存。它不是被释放的指针,而是指针指向的内存被释放。

答案 1 :(得分:1)

您必须传递从free()获得的malloc()

int *x = malloc(42 * sizeof *x);
int *p = &x[0];
free(p);                /* ok, same as free x; x and p have the same value */

编辑:另一个例子

int *x = malloc(42 * sizeof *x);
for (k = 0; k < 24; k++) *x++ = 0; /* zero first 24 elements */
free(x - 24);

答案 2 :(得分:0)

你在这里问的不完全清楚,但如果你问的是:

Can I call free() on a pointer which points to a location within the allocated block?

然后答案是“否” - 你必须传递free()malloc()返回的确切指针。尝试free()内部指针或指向未由malloc()分配的内存的指针,可能会发生内存损坏或崩溃。