car*_*995 8 c free scope static-variables dynamic-allocation
代码如下:
#include <stdlib.h>
int num = 3; // Static external variable
int *ptr = #
int main(void)
{
int num2 = 4; // Automatic variable
int *ptr2 = &num2;
free(ptr); //Free static variable
free(ptr2); //Free automatic variable
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我尝试编译上面的代码,它的工作原理,我很好奇free()功能是否能够释放静态变量和自动变量?或者基本上什么也没做?
Alo*_*ave 17
调用free()上不通过存储器分配函数(返回一个指针malloc,calloc等等)导致未定义行为.
您的代码具有未定义的行为,因此编译器不需要为您提供任何诊断,它可以显示任何行为,它可能会工作,或崩溃,或从字面上做任何事情.
只是避免编写导致未定义行为的代码是唯一的解决方案.
你不应该这样做.free仅用于由malloc函数族从堆动态分配的内存.
内存为num静态分配在数据段中,无法释放.Memory for num2在main调用堆栈帧中分配,并在main返回后立即释放.
实际发生的事情取决于实施free.通常在堆中维护特定的数据结构以帮助malloc/ free跟踪分配的和可用的存储区域.free我希望这些数据结构能够在它的参数指向的地方附近.当你向它传递一个指向未malloc分配堆区域的指针时,它会将垃圾数据视为一些有用的信息并做一些奇怪的事情.如果结果只是一个立即的程序崩溃,你很幸运.