我刚刚写了一个函数,它返回一个指向由malloc分配的内存块的指针。如果我在返回的指针上调用free(),这会释放内存吗?传递malloc分配的空间指针
我试着读到这一点,但我找不到任何说你是否可以调用指向同一位置的不同指针,以及是否会释放所有内存。
这可能主要是基本的,我想我找不到信息,因为我找错了。
任何帮助表示赞赏!
我刚刚写了一个函数,它返回一个指向由malloc分配的内存块的指针。如果我在返回的指针上调用free(),这会释放内存吗?传递malloc分配的空间指针
我试着读到这一点,但我找不到任何说你是否可以调用指向同一位置的不同指针,以及是否会释放所有内存。
这可能主要是基本的,我想我找不到信息,因为我找错了。
任何帮助表示赞赏!
是的调用free
将释放内存。它不是被释放的指针,而是指针指向的内存被释放。
这不是完全清楚你问在这里,但如果你问的是:
Can I call free() on a pointer which points to a location within the allocated block?
那么答案是“不” - 你必须通过free()
你得到了确切的指针从malloc()
返回。尝试free()
内部指针或指向未由malloc()
分配的内存的指针时,可能会发生内存损坏或崩溃。
我想你误会了OP的问题。 – 2011-05-31 00:12:11
您必须将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);
+1 *值*在这里是关键,而OP似乎并不了解。 – 2011-05-31 00:12:42
谢谢!我猜测有多少内存被分配存储在其他地方的信息,所以当'free'被调用时,它知道要释放多少内存? – Russbear 2011-06-01 18:01:57
是的,这是正确的。 – 2011-06-01 20:34:15
@RichardSchneider如果我有一个函数,我使用malloc和一个指针分配一些内存,实际上我扩展了一个数组。现在,我必须使用return来传递相同的数组。现在,在我返回之前,我甚至无法释放它。在这种情况下,我可以做什么? – 2012-10-18 17:09:15