获取空闲时指针指向内存块()指针是什么?

时间:2015-01-31 07:33:19

标签: c pointers memory memory-management

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

当我开始想知道如何自由工作时,我正在为我的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)

并且是一样的吗?

对不起任何语法错误,我的英语很差。

谢谢!

3 个答案:

答案 0 :(得分:3)

这个

copy=original;

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

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

现在你也可以免费 - 你会得到相同的结果。

答案 1 :(得分:2)

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

是的,那些都完全一样。在执行其中任何一个之后,originalcopy都是无效指针。 copy2仍然是指向original的有效指针,但*copy2不是有效指针。

与某些语言不同,C会跟踪有多少指针引用内存中的特定位置。因此,当您在任何一个指针上调用free时,内存将被释放,并且所有指针都将无效。

答案 2 :(得分:1)

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

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

所以它类似于free(original)

指针可能指向的位置是由分配空间的操作系统维护的内存记录,在释放时使用