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????

Rispondi quotando