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