2011-05-30 124 views
0

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

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

这可能主要是基本的,我想我找不到信息,因为我找错了。

任何帮助表示赞赏!

回答

3

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

+0

谢谢!我猜测有多少内存被分配存储在其他地方的信息,所以当'free'被调用时,它知道要释放多少内存? – Russbear 2011-06-01 18:01:57

+0

是的,这是正确的。 – 2011-06-01 20:34:15

+0

@RichardSchneider如果我有一个函数,我使用malloc和一个指针分配一些内存,实际上我扩展了一个数组。现在,我必须使用return来传递相同的数组。现在,在我返回之前,我甚至无法释放它。在这种情况下,我可以做什么? – 2012-10-18 17:09:15

0

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

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

那么答案是“不” - 你必须通过free()你得到了确切的指针从malloc()返回。尝试free()内部指针或指向未由malloc()分配的内存的指针时,可能会发生内存损坏或崩溃。

+0

我想你误会了OP的问题。 – 2011-05-31 00:12:11

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); 
+0

+1 *值*在这里是关键,而OP似乎并不了解。 – 2011-05-31 00:12:42