Avi*_*mar 3 c malloc free pointers memory-management
在动态内存分配方面,我是新手.当我们释放内存时,使用void free(void *ptr)内存被释放,但指针的内容不会被删除.这是为什么?最新的C编译器有什么不同吗?
计算机不会"删除"内存,它们只是停止使用对该内存单元的所有引用,并忘记存储任何有价值的东西.例如:
int* func (void)
{
int x = 5;
return &x;
}
printf("%d", *func()); // undefined behavior
Run Code Online (Sandbox Code Playgroud)
一旦函数完成,程序就会停止保存存储的存储位置,x程序的任何其他部分(或者可能是另一个程序)都可以自由使用它.所以上面的代码可以打印5,或者它可以打印垃圾,或者它甚至可能导致程序崩溃:引用已经停止有效的内存单元格的内容是未定义的行为.
动态内存也不例外,并以相同的方式工作.一旦你打电话free(),任何人都可以使用那部分内存的内容.
另外,请看这个问题.