我刚刚写了一个函数,它返回一个指向malloc分配的内存块的指针。如果我在返回的指针上调用free(),它会释放内存吗?
我试着读一下这个,但我找不到任何说明你是否可以调用指向同一位置的不同指针,以及是否会释放所有内存。
这可能是主要的基础,我想我找不到信息,因为我正在寻找错误。
任何帮助表示赞赏!
答案 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()
分配的内存的指针,可能会发生内存损坏或崩溃。