Comunque continua a darmi SIGSEV (segmentation fault) quando chiamo la free,riposto il codice completo corretto:
codice:
int main(int agrc,char **agrv)
{
    char *buffer;
    lista *stack1,*stack2;
    int *num1,*num2,i;
    bool continua;
    num1=(int*)malloc(sizeof(int));
    num2=(int*)malloc(sizeof(int));
    (*num1)=0;
    (*num2)=0;
    if(num1==NULL||num2==NULL)
        MERROR
    printf("Inserire la prima lista di strutture:\n");
    do
    {
        insert(stack1,num1);
        printf("Continuare ad inserire elementi?-->");
        buffer=input();
        continua=(atoi(buffer));
        free(buffer);
    }while(continua);
    printf("Inserire la seconda lista di strutture:\n");
    do
    {
        insert(stack2,num2);
        printf("Continuare ad inserire elementi?-->");
        buffer=input();
        continua=(atoi(buffer));
        free(buffer);
    }while(continua);
    printf("%d,%d\n",*num1,*num2);      /* debug */
    for(i=0;i<(*num1);i++)
    {
        free(stack1[i].nome);
        free(stack1[i].cognome);
    }
    for(i=0;i<(*num2);i++)
    {
        free(stack2[i].nome);
        free(stack2[i].cognome);
    }
    free(stack1);
    free(stack2);
    free(num1);
    free(num2);
    return 1;
}
codice:
char *input (void)
{
    char *buffer;
    char seeker;
    int size=1;
    buffer=(char*)malloc(sizeof(char));
    if(buffer==NULL)
        MERROR
    while((seeker=getchar())!=10)
    {
        buffer[size-1]=seeker;
        buffer=(char*)realloc(buffer,sizeof(char*));
        if(buffer==NULL)
            MERROR
    }
    buffer[size-1]='\0';
    return buffer;
}

bool insert(lista *ptr,int *num)
{
    (*num)++;
    char *buffer;
    if((*num)==1)
    {
        ptr=(lista*)malloc(sizeof(lista));
        if(ptr==NULL)
            MERROR
    }
    else
    {
        ptr=(lista*)realloc(ptr,(*num)*sizeof(lista));
        if(ptr==NULL)
            MERROR
    }
    printf("Inserisci nome:-->");
    ptr[*num-1].nome=input();
    printf("Inserisci cognome:-->");
    ptr[*num-1].cognome=input();
    printf("Inserisci eta:-->");
    buffer=input();
    ptr[*num-1].eta=atoi(buffer);
    free(buffer);
    return true;
}
Crasha esattamente alla riga 78:
codice:
free(stack1[i].nome);
Eppure se ho fatto tutto bene stack1 dovrebbe avere spazio in memoria,nella funzione di inserimento uso la malloc e se ritorna il puntatore a vuoto ho anche previsto un errore,non capisco perchè fa così.