C语言 我可以释放最初从另一个指针分配的内存吗?



如果我从另一个指针分配内存,然后声明一个指针等于另一个指针,然后我可以通过在新指针上使用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,这才是最重要的。

相关内容

  • 没有找到相关文章

最新更新