我试图向 friend 解释免费的工作原理,所以我想到了以下代码示例来尝试解释它(复杂,我知道):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char *stringPtr = NULL;
//Pass the size of the string in bytes to malloc
stringPtr = (char *)malloc(10 * sizeof(char));
strcpy(stringPtr, "A String. ");
printf("%s", stringPtr);
free(stringPtr);
printf("%s", stringPtr);
return 0;
}
考虑到这段代码会释放堆上分配的内存,我假设如果我然后打印出分配给指针的字符串,它会做一些奇怪的事情或使程序崩溃,因为我假设它会尝试输出空值;但是当我运行它时,它最终只输出了两次字符串。我想我会逐步检查它以了解原因,因为在我看来我认为它可能将字符串复制到堆栈或其他东西,然后指针将指向一个新的内存地址并且旧内存毕竟被清理了(并不是那个场景有任何意义,但是嘿,我不知道它还会是什么),但是当我单步执行代码时,它不仅没有释放内存,指针实际上仍然指向同一个内存地址 和 它具有相同的值。
当我调查它时,人们说你需要在调用 free 后为指针分配一个空值,但我的问题是为什么?不应该 free 只是释放该内存并将指针设置为 null 吗?保值的意义何在?或者我只是不明白什么?
最佳答案
Shouldn't free ... deallocate that memory
假设您的公司决定搬迁您的工作空间,因此他们为您分配了一张新办公 table 并取消了您现有的办公 table 。他们会立即清理你的旧办公 table 吗?可能不会,除非他们立即需要它。如果你回去检查抽屉,你可能会找到你留在那儿的口香糖,也可能找不到。您的空间已解除分配,但这并不意味着它会立即清除或消失。这不再是您的空间。
Shouldn't free ... set the pointer to null?
free
获取指针的副本,因为指针是按值传递的。 free
无法删除您持有指针的变量。
关于c - 为什么 free 不清除指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33840319/