Произойдет ли утечка памяти в приведенном фрагменте кода? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
char * strconcat( char * s, char * t )
{
    char * f = malloc((strlen(s)+strlen(t)+1)*sizeof(char));
    char * fs= f;
    while( *s ) *(f++)=*s++;
    while( *t ) *(f++)=*t++;
    *f = '\0';
    return fs;
}
 
int main( int argc, char * argv[] )
{
    char * str = strconcat("stroka1", "stroka2");
 
    printf("%s", str);
    
    return 0;
}
Добрый ночь! Читаю K&R, ваяю код. Внимание, - вопрос: Если без
* str
сразу сделать
printf("%s", strconcat("stroka1","stroka2"));
Произойдет утечка памяти? И ещё - первая и вторая строки - с ними что произойдет? Они после выхода из функции очищаются или нет? Заведомо спасибо!

Решение задачи: «Произойдет ли утечка памяти в приведенном фрагменте кода?»

textual
Листинг программы
printf("%s", strconcat("stroka1","stroka2"));

Объяснение кода листинга программы

В данном фрагменте кода выполняется операция конкатенации (объединения) двух строк stroka1 и stroka2 с использованием функции strconcat, а затем результат выводится на экран с помощью функции printf. Переменные stroka1 и stroka2 представляют собой строковые значения, которые объединяются в одну строку. Значение этой новой строки затем выводится на экран. Важно отметить, что в данном фрагменте кода не происходит выделения памяти под новую строку, так как функция strconcat создает новую строку в месте ее вызова, т.е. в стеке. Поэтому утечка памяти в данном фрагменте кода невозможна.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы