I wanted to know what happens in this piece of code?
Here, I have a variable f2 in func2 where it is allotted a block of space via malloc and a variable f1 in func1 which is also allotted a block of space via malloc.
#include <stdio.h>
#include <stdlib.h>
char* func2(){
    char *f2 = (char *)malloc (sizeof(char) * 10);
    
    f2[0] = '1';
    f2[1] = '2';
    f2[2] = '3';
    f2[3] = '\0';
    
    return f2;
}
char* func1(){
    char *f1 = (char *)malloc (sizeof(char) * 10);
    
    f1 = func2();
    
    return f1;
}
int main()
{
    printf("String: %s", func1());
    return 0;
}
Now, since I have allotted a heap memory in func2, and func1 is calling it, then func1 should free that memory. But I am allocating the returned value to one of func1's local variable f1 and would return that variable to main function I can't delete it in func1.
So, how will I free the memory that was allocated in func2.
Is the heap memory space for f1 in func1 and f2 in func2 the same?
 
     
    