codice:
  int nlines;
         if  ((nlines = readlines(lineptr, MAXLINES)) >= 0 )
separa le varie cose, prova a vedere che succede,

lineptr

chi è? quanto vale?

lo hai definito così

char *lineptr[MAXLINES];

ma hai, se non erro, un doppio puntatore, hai allocato l'array, non il contenuto dell'array (che punta a niente)