获得空闲时指向内存块的指针()不管指针是什么?

pointer pointing to a memory block when gets free () matter what pointer is?

是一个快速而简单的问题。我没有在Whosebug中找到它,所以如果已经问过,我很抱歉。

当我开始想知道如何自由工作时,我正在为我的 BST(我正在学习)做一个删除功能。 free 知道必须释放多少内存以及它在哪里,因为内存块包含该信息。但是,要释放什么指针呢?

例如在这段代码中:

....
NODE* original,copy; //NODE is a struct.
NODE** copy2;
original=(NODE*)Malloc(sizeof(NODE));
copy=original;
copy2=&original;
free(copy)
....

我相信是这样的:

copy2---->original------>[memory block] <---------copy

我的疑惑是下一个:

无论传递什么指针给free,内存块都会被释放吗?

所以我能做到:

free(original)
free(copy)
free(*copy2)

和一样吗?

抱歉有任何语法错误,我的英语有点差。

谢谢!

这个

copy=original;

仅仅是指针的赋值。您将内存块的地址从一个变量复制到另一个变量,如下所示:

   [.........memory block.........] <- You are freeing this NOT the pointer
   |
 copy
original

现在你释放任何一个 - 你会得到相同的结果。

free() 期望用于 malloc() calloc() realloc()

的指针

您不是将相同的指针传递给 free(),而是使用中间指针传递相同地址的副本 copy

所以它类似于free(original)

指针可能指向的地方有一个内存记录,由分配的 space 的 OS 维护,并在释放

时使用
free(original)
free(copy)
free(*copy2)

是的,它们都做同样的事情。在你执行其中任何一项之后,originalcopy 都是无效指针。 copy2 仍然是指向 original 的有效指针,但 *copy2 不是有效指针。

与某些语言不同,C 不会 跟踪有多少指针指向内存中的特定位置。所以当你在任何一个指针上调用 free 时,内存被释放,所有的指针都变得无效。