如果我从另一个指针分配内存,然后声明一个指针等于另一个指针,我可以通过在新指针上使用 free()
释放第一个指针分配的内存吗?
例子:
typedef struct foo{
int n;
char c;
} foo;
foo* bar = malloc(sizeof(foo));
foo* tmp = bar; // declaring pointer identical to other pointer
free(tmp); // can I do this to free *bar?
最佳答案
是的,完全没问题。
malloc
的实现很可能会在返回指向它的指针之前将内存块标记为已分配。
现在您可以拥有任意数量的指向这 block 内存的指针变量,您可以通过对其中任何一个调用 free
来释放该内存。
指针本身并不包含它指向的内存是否已经分配的信息。它只是指向它。
int* i = malloc(sizeof(int) * 23);
int* j = i;
free(j);
// free(i); // this is undefined behavior, the memory was already freed
关于我可以释放最初从另一个指针分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40333064/