No, la memoria allocata con malloc non viene liberato quando si esce dall'ambito/ritorno dalla funzione.
Sei responsabile di liberare la memoria di Malloc.
Nel tuo caso però, la memoria NON è accessibile in main(), ma è perché si tratta solo di una variabile locale.
void function(int *a)
{
a=(int *)malloc(sizeof(int));
Qui, a
è una variabile locale all'interno function
. I puntatori vengono passati per valore in C, quindi a
riceve una copia del puntatore principale quando si esegue function(num);
main() non si vede che si assegna a quella copia locale del puntatore.
quello che dovete fare uno:
void function(int **a)
{
*a= malloc(sizeof(int));
**a=10;
}
int main()
{
int *num;
function(&num);
printf("%d",*num);
free(num);
return(0);
}
o
int* function(void)
{
int *a= malloc(sizeof(int));
*a=10;
return a;
}
int main()
{
int *num;
num = function();
printf("%d",*num);
free(num);
return(0);
}