Salve a tutti, ho un problema urgente che non riesco a risolvere..
Ho una funzione nel main che restituisce un array contenente la formula..
La funzione per ottenere la formula è questa:

codice:
/* Definizione della funzione acquisisci_formula_logica_predicati */
char* acquisisci_formula_logica_predicati(void)
{
        char  *array_momentaneo, 
          *array_momentaneo2,     /* Array momentaneo formula */
 
    *formula,
    carattere_acquisito;    /* Variabile formula */
    
    int 	 j = 0,			 /* Indice array momentaneo */
                 i = 0,
                 k = 0,
                 max = 1,
                 l = 1;
    
    /* Acquisizione formula */
    /* Allocazione memoria */
    formula = (char *) calloc(max, sizeof (char));
    
    /* Digitazione formula */
    printf("\nDigitare la formula:\n\n\t");
    i=0;
    /* Acquisizione formula */
    while ((carattere_acquisito = getchar()) != '\n')
    {
        if ((i % max) == 0)
          formula = (char*) realloc(formula,((l += max)*sizeof(char)));
        formula[i]= carattere_acquisito;
        i++;
    }
    /* Assegnamento terminazione */
    formula = (char*) realloc(formula,((l += max)*sizeof(char)));
    formula[i] = '\0';
    printf("\n");
    l=1;
    max=1;
    i=0;
    /* Allocazione memoria */
    array_momentaneo = (char *) calloc(max, sizeof (char));
    /* Elisione spazi e tabulazioni */
    while(formula[i] != '\0')
    {
    if ((formula[i] != ' ') && (formula[i] != '\t'))
        {
            /* Memorizzazione formula */
            array_momentaneo = (char *) realloc(array_momentaneo, ((l += max)*sizeof(char)));
            array_momentaneo[j] = formula[i];
            j++;
            i++;
        }
        else i++;
  }
 array_momentaneo = (char *) realloc(array_momentaneo, ((l += max)*sizeof(char)));
 array_momentaneo[j] = '\0';      
    i = 0;
    j = 0;
    max = 1;
    l = 1;
    k = 0;
    controlli_not(array_momentaneo,formula);
    /* Allocazione memoria */   
    array_momentaneo2 = (char *)calloc(max, sizeof (char));
    /* Elisioni not */
    while(array_momentaneo[j] != '\0')
    {
      
        if (array_momentaneo[j] != '1')
        {
            /* Memorizzazione formula */
            array_momentaneo2 = (char*) realloc(array_momentaneo2,((l += max)*sizeof(char)));
            array_momentaneo2[k] = array_momentaneo[j];
            k++;
            j++;
        }
        else j++;
        }

    array_momentaneo2 = (char*) realloc(array_momentaneo2,((l += max)*sizeof(char)));
    array_momentaneo2[k] = '\0';
    array_momentaneo[0] = '\0';
    free(formula);    
    formula = (char*) calloc((l += max),sizeof(char));
    strcpy(formula, array_momentaneo2);
    array_momentaneo2[0] = '\0';
    /* Inserimento formula nel array principale */
    free(array_momentaneo2);
     i = 0;
    j = 0;
    k = 0;
    max = 1;
    l = 1;
    controlli(formula);
   
   

    return formula;
}

Gli errori che trovo sono questi:
se inserisco una formula sbagliata ad esempio lunga 4 poi una lunga 10 non me la prende o mi da un errore di memoria...
Poi alcune volte se la prima volta metto una formula errata e la seconda giusta questa non mi ritorna al main...

Durante l'acquisizione della formula ci sono due controlli:
i primi controlli not che se trovo errore mi riparte questa funzione e prima di ripartire ho messo un free(formula)
Poi i controlli alla fine che se trova errore fa la stessa cosa...

Come posso fare????