Through malloc you achieve dynamic memory allocation and dynamically allocated object remains allocated until it is deallocated explicitly, either by the programmer or by a garbage collector.

Static memory allocation refers to the process of allocating memory at compile-time before the associated program is executed.

So to summarize if you allocate the memory you need to be freeing it up or if compiler allocates it for you, you dont need to be freeing it up.