>
>char* foo()
>{
> char *a = malloc(100);
> strcpy(a,"my string");
> return a;
>}
>
>char* my_var = foo();
>
>Правильно ли так писать?В данном конкретном случае - нормально.
Но где гарантия что strlen("my string") будет меньше 100? Всегда сначала надо узнать нужный размер блока памяти, а потом только вызывать malloc. Кроме того, вместо strcpy рекомендуется использовать функции, в которых указывается размер блока памяти (к сожалению, они не все еще стандартизированы).
>Освобождается ли память,
>выделенная malloc-ом после выхода из foo?
Нет. malloc(3) выделяет память в куче и время жизни выделенных ей блоков не зависит от входов/выходов из функций. Блок памяти будет жить до вызова free(3).
Для выделения блоков памяти заранее неизвестного размера в стеке (чтобы они автоматически удалялись по выходу из функции) можно использовать alloca(3). Хотя это не совсем (совсем не) стандартный вызов, да и не рекомендуют его использовать для больших блоков памяти и/или на платформах с маленькими стеками, но иногда он предпочтительней чем malloc (например, для избежания фрагментации кучи, что критично в долгоработающих демонах).
>Заранее спасибо.
А вообще весь твой код можно смело заменить на
char* my_var = strdup("my string");