如果我从另一个指针分配内存,然后声明一个指针等于另一个指针,然后我可以通过在新指针上使用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
实现很可能在返回指向它的指针之前将内存块标记为已分配。
现在你可以有任意多的指针变量,它们指向这块内存,你可以通过调用free
来释放这些内存。
指针本身不包含它所指向的内存是否已被分配的信息。它只是指向它。
int* i = malloc(sizeof(int) * 23);
int* j = i;
free(j);
// free(i); // this is undefined behavior, the memory was already freed
是的,你可以做到你所要求的。但它不是另一个指针,你释放的是同一个指针。当malloc
返回一个指针时,它实际上是给您一个整数,它是它为您保留的内存块的起始地址。当你用完内存后,你把那个地址传递给free
。就free
而言,
free(malloc(17));
void *p = malloc(17);
free(p);
或
void *p1 = malloc(17);
void *p2 = p1;
free(p2);
在所有这些情况下,从malloc
返回的值都将到达free
,这才是最重要的。