Нет, память, выделенная с malloc не освобождается, когда вы покидаете область/возврат из функции.
Вы несете ответственность за освобождение памяти, которую вы malloc.
В вашем случае, однако, память НЕ ДОПУСКАЕТСЯ в main(), но это потому, что вы имеете дело только с локальной переменной.
void function(int *a)
{
a=(int *)malloc(sizeof(int));
Здесь a
локальная переменная в function
. Указатели передаются по значению в C, поэтому a
получает копию указателя в главном, когда вы делаете function(num);
main() не видит, что вы назначаете эту локальную копию указателя.
Вы должны сделать что-либо:
void function(int **a)
{
*a= malloc(sizeof(int));
**a=10;
}
int main()
{
int *num;
function(&num);
printf("%d",*num);
free(num);
return(0);
}
или
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);
}