ciao a tutti, volevo capire come mai mettendo del codice in una funzione e richiamando quella funzione non va, mi da un errore di realloc, mentre lasciandolo nel main è tutto perfettamente fuznionante.. vi copio il codice

codice:
int p[2];

pipe(p);

int isfork;
isfork = fork();

if(isfork == 0){

dup2(p[1],1);
close(p[0]);
  char *args[2] = { "date", NULL };
execvp (args[0], args);
}

else
{

char c;
char *stringa = malloc(sizeof(char *));
int i = 0;

dup2(p[0],0);
close(p[1]);
while( read(p[0],&c,sizeof(c) ) ){
stringa = realloc(stringa, (i + 1) * sizeof(char *));
i++;
strcat(stringa,&c);
printf("%c",c);
}

printf("%s",stringa);
}
se questo lo metto in una funzione void, o int , o char che sia mi da il seguente errore

*** glibc detected *** realloc(): invalid next size: 0x0804a008 ***
SAborted

non reisco proprio a capire l'errore qual è se funziona nel main.. boh.. ditemi voi.. grazie.