Can I free() static and automatic variables in C?

后端 未结 2 953
野趣味
野趣味 2020-12-11 16:31

The code is as follow :

#include 

int num = 3;   // Static external variable
int *ptr = #

int main(void)
{
 int num2 = 4;  // Autom         


        
相关标签:
2条回答
  • 2020-12-11 17:26

    You shouldn't do that. free is only used for memory dynamically allocated from heap by malloc family of functions.

    Memory for num is statically allocated in data segment and can't be released. Memory for num2 is allocated in the main's call stack frame and will be released as soon as main returns.

    What actually happens depend on implementation of free. There are usually specific data structures maintained in heap to help malloc/free track the allocated and free memory areas. free expects these data structures to be somewhere around the place its argument points to. An when you pass it a pointer which doesn't point to a malloc-allocated heap area, it'll consider garbage data as some useful information and do some strange things. And you're lucky if the result is just an immediate program crash.

    0 讨论(0)
  • 2020-12-11 17:33

    Calling free() on a pointer not returned by memory allocating functions(malloc,calloc etc) causes Undefined Behavior.
    Your code has an Undefined Behavior, So the compiler does not need to give you any diagnostic of it and it can show any behavior, it might work, or crash, or literally do anything.

    Just avoid writing code which causes an Undefined Behavior is the only solution.

    0 讨论(0)
提交回复
热议问题