Ecco qui i due metodi indagati:
In poche parole il primo metodo estrare le righe da un file txt in cui compare in lemma passato e le passa al secondo metodo che filtra le parole...La cosa strana è che funziona , per le prime righe, poi lancia un'eccezzione...dalle prove il problema è la malloc nel secondo metodo...ma perchè a volte funge e a volte no?
grazie mille, sono giorni che ci sto sbattendo la testa senza cavarci niente!codice:/* Metodo che rimuove dal file in input tutte le righe in cui compare il lemma passato */ void delete_lemma_all(FILE *stream, char *lemma){ FILE *tmp; tmp = fopen("./file_tmp.txt", "w+"); char linea[512]; int row=0; while(fgets(linea,512,stream) != NULL ){ if(strstr(linea, lemma) == NULL) { fprintf(tmp,"%s",linea); } else {printf("%s\n",linea); delete_lemma_all_2(linea, row);} row++; } fclose(tmp); fclose(stream); remove("./file.txt"); rename("./file_tmp.txt","./file.txt"); stream = fopen("./file.txt", "r+"); } /* Metodo che estrae dalla stringa passate tutti lemmi, in modo da aggiornare il database */ void delete_lemma_all_2(char *linea, int row){ int len = strlen(linea); char ch; char *lemma = NULL; int i=0; int k=0; lemma = (char*)malloc(sizeof(char)); /* DOPO UN PO SI IMPIANTA IN STA MALLOC!!! COME MAI? */ if (lemma == NULL) { printf("Errore nell'allocazione di memoria\n"); exit (1); } printf("Lunghezza linea: %d\n",len); /*while( (ch = linea[k]) != '\0' ){*/ while(k<len){ ch = linea[k]; if((((int)ch>64)&&((int)ch<91))||(((int)ch>96)&&((int)ch<123))){ lemma = (char*)realloc(lemma,(i+1)*sizeof(char)); if (lemma == NULL) { printf("Errore nell'allocazione di memoria\n"); exit (1); } lemma[i]=ch; i++; }else{ lemma[i]='\0'; if ((i>3)&&(i<MAX_LEMMA)) printf("->%s\n",lemma); i=0; free(lemma); } k++; } lemma[i]='\0'; if ((i>3)&&(i<MAX_LEMMA)) printf("%s\n",lemma); free(lemma); }

Rispondi quotando