Нет, память, выделенная с помощью malloc, не освобождается при выходе из области действия / возврата из функции.
Вы отвечаете за освобождение памяти, которую вы используете malloc.
В вашем случаетем не менее, память недоступна в main (), но это потому, что вы имеете дело только с локальной переменной.
void function(int *a)
{
a=(int *)malloc(sizeof(int));
Здесь a
- локальная переменная в function
.Указатели передаются по значению в C, поэтому a
получает копию указателя в main, когда вы не выполняете function(num);
main () не видит, что вы назначаете эту локальную копию указателя.
Youдолжны сделать либо:
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);
}