Нужно ли освобождать указатель, который получает динамически размещенный объект из функции? - PullRequest
0 голосов
/ 31 октября 2019

Я реализую функцию, которая читает строку в C из стандартного ввода. Вот код:

char * stdin_getline(){
  unsigned buffer_size = 100;
  char *string = malloc(buffer_size);
  char *string_temp;
  char temp;
  int i=0;
  while(1) {
    scanf("%c", &temp);
    if (temp == '\n') {break;}
    if (i == buffer_size-1) {
      *(string+buffer_size) = '\0';
      string_temp = malloc(buffer_size);
      strcpy(string_temp, string);
      free(string);
      buffer_size *= 2;
      string = malloc(buffer_size);
      strcpy(string, string_temp);
      free(string_temp);
    }
    *(string+i) = temp;
    i++;
  }
  *(string+i+1) = '\0';
  return string;
}

int main() {
  char *temp_line;
  temp_line = stdin_getline();
  printf("%s\n", temp_line);
  free(temp_line); // Is this line needed?
  return 0;
}

Действительно ли мне нужно освободить указатель temp_line внутри основной функции?

1 Ответ

2 голосов
/ 31 октября 2019

Вызов функции не имеет отношения к вопросу. Все, что было выделено malloc, должно быть освобождено с использованием free, чтобы избежать утечек памяти.

...