Pytanie o getline() w libc i free

0

Witam,

Używam funkcji getline z stdio.h (libc).
http://www.freebsd.org/cgi/man.cgi?query=getline&apropos=0&sektion=0&manpath=FreeBSD+8.2-RELEASE&format=html

Jest prosta w użyciu, ale mam wątpliwości odnośnie sprzątania. Funkcja dokonuje dynamicznej alokacji pamięci poprzez realloc (przynajmniej według man). Wydaje mi się, że niezbędne w tej sytuacji jest korzystanie z free. Na przykład:

#define _WITH_GETLINE
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>

bool test(char* line) {
  
  return true;
}

int main(void)
{
  int t;
  scanf("%d", &t);
  getchar(); // fix getline
  
  char* line = NULL;
  size_t linecap;

  for(int i = 0; i < t; i++) {
    getline(&line, &linecap, stdin);
    test(line);
  }
  free(line);
  
  return 0;
}

Wydaje mi się, że free powinno zostać wykonane zawsze, gdy

char* line

nie będzie już więcej reallocowane, a na przykład inna część programu będzie dalej działać.

Ponieważ nie jestem pewien pytam, by się upewnić, w końcu wycieki pamięci to poważna sprawa. W manie nie napisali nic o sprzątaniu, ale chyba nie ma tak że w języku C coś się samo posprząta.

Pozdrawiam,

0

trochę bezpieczniej będzie:

if(line) { free(line); line=NULL; }

z tym że musisz pamiętać że ten getline jest niestandardowym tworem GCC więc jak go użyjesz to
ci się nie skompiluje pod niczym innym.
Radzę używać standardowych rozwiązań.

0

Dzieki. Z mana wynika, ze getline jest w standardzie POSIX.1 a to mi w zupelnosci wystarczy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1