我刚刚编写了一个函数,它返回一个指向malloc分配的内存块的指针。如果我对返回的指针调用free(),这会释放内存吗?
我试着读了一下,但我找不到任何东西来说明你是否可以调用指向同一位置的不同指针,以及这是否会释放所有内存。
这可能是最基本的,我想我找不到信息,因为我找错了。
感谢您的帮助!
Yes调用free
将释放内存。释放的不是指针,而是指针指向的内存。
必须将从malloc()
获得的值传递给free()
。
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);
这里不完全清楚你在问什么,但如果你在问:
Can I call free() on a pointer which points to a location within the allocated block?
那么答案是"否"——您必须将从malloc()
得到的确切指针传递给free()
。尝试free()
内部指针,或指向未由malloc()
分配的内存的指针,可能会发生内存损坏或崩溃。