Нет, динамически выделенная память не освобождается автоматически. В Си это ответственность программистов за освобождение.
Также - C передает переменные по значениям, str = malloc (10 * sizeof (char)); просто присваивает локальную переменную 'str'.
Похоже, вы хотите вернуть указатель, полученный из malloc, поэтому ваша программа становится:
char *method2(void)
{
// Allocate 10 characters for str
return malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
stringvar = method2();
...
free(stringvar);
}
Другой вариант, если вы хотите манипулировать 'stringvar' из метода method2, это передать указатель на 'stringvar', например
void method2(char** str)
{
// Allocate 10 characters for str
*str = malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
method2(&stringvar);
...
free(stringvar);
}