获得空闲时指向内存块的指针()不管指针是什么?
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)
是的,它们都做同样的事情。在你执行其中任何一项之后,original
和 copy
都是无效指针。 copy2
仍然是指向 original
的有效指针,但 *copy2
不是有效指针。
与某些语言不同,C 不会 跟踪有多少指针指向内存中的特定位置。所以当你在任何一个指针上调用 free
时,内存被释放,所有的指针都变得无效。
是一个快速而简单的问题。我没有在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)
是的,它们都做同样的事情。在你执行其中任何一项之后,original
和 copy
都是无效指针。 copy2
仍然是指向 original
的有效指针,但 *copy2
不是有效指针。
与某些语言不同,C 不会 跟踪有多少指针指向内存中的特定位置。所以当你在任何一个指针上调用 free
时,内存被释放,所有的指针都变得无效。