PDA

Visualizza la versione completa : [C] Errore glibc: corrupted double-linked list


kerbero
03-09-2007, 17:15
Salve!! Sto realizzando un semplice indicizzatore di testi: in pratica il programma riceve in input dei file di testo,li legge parola per parola e inserisce le informazioni ricavate in un file indice che verrà in futuro utilizzato da un secondo programma per realizzare delle query. Il primo programma può essere invocato più volte ed ogni volta aggiornerà il file indice con le nuove informazioni ottenute. Come struttura dati viene utilizzato un albero AVL.
Premesso che ho ricontrollato più e più volte il codice (non è una garanzia di correttezza assoluta, ma almeno sono abbastanza sicuro che sia corretto), il problema è questo: non riesco ad indicizzare più di tre file, qualsiasi sia la loro dimensione e sia che li indicizza tutti insieme o con diverse invocazioni del programma. Infatti, quando provo ad indicizzare il quarto file, il programma esce stampandomi questo:



*** glibc detected *** ./a.out: corrupted double-linked list: 0x0804b168 ***
======= Backtrace: =========
/lib/libc.so.6[0xb7eb3082]
/lib/libc.so.6[0xb7eb42e0]
/lib/libc.so.6(__libc_free+0x84)[0xb7eb4704]
/lib/libc.so.6(fclose+0x14d)[0xb7ea47dd]
./a.out[0x8048f22]
/lib/libc.so.6(__libc_start_main+0xdc)[0xb7e658cc]
./a.out[0x80486e1]
======= Memory map: ========
08048000-0804a000 r-xp 00000000 08:04 1681373 /home/tiziano/LLS/Progetto/src/a.out
0804a000-0804b000 rw-p 00001000 08:04 1681373 /home/tiziano/LLS/Progetto/src/a.out
0804b000-0806c000 rw-p 0804b000 00:00 0 [heap]
b7d00000-b7d21000 rw-p b7d00000 00:00 0
b7d21000-b7e00000 ---p b7d21000 00:00 0
b7e44000-b7e4e000 r-xp 00000000 08:04 1599427 /lib/libgcc_s.so.1
b7e4e000-b7e4f000 rw-p 00009000 08:04 1599427 /lib/libgcc_s.so.1
b7e4f000-b7e50000 rw-p b7e4f000 00:00 0
b7e50000-b7f69000 r-xp 00000000 08:04 1599622 /lib/libc-2.4.so
b7f69000-b7f6b000 r--p 00118000 08:04 1599622 /lib/libc-2.4.so
b7f6b000-b7f6d000 rw-p 0011a000 08:04 1599622 /lib/libc-2.4.so
b7f6d000-b7f70000 rw-p b7f6d000 00:00 0
b7f7d000-b7f7f000 rw-p b7f7d000 00:00 0
b7f7f000-b7f98000 r-xp 00000000 08:04 1599382 /lib/ld-2.4.so
b7f98000-b7f9a000 rw-p 00018000 08:04 1599382 /lib/ld-2.4.so
bfb5d000-bfb72000 rw-p bfb5d000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
Aborted (core dumped)


Come codice vi riporto il main del programma:

int i;
FILE *f,*fp;

len=0;
//carichiamo l'index
fp=fopen("index","r");
if(fp)
{
carica_da_file(fp);
fclose(fp);
}
for(i=1;i<argc;i++)
{
f=fopen(argv[i],"r");
if(f)
{
//salviamo il nome del file che andiamo ad indicizzare
files=(char **)realloc(files,++len);
files[(len-1)]=(char *)malloc(strlen(argv[i])+1);
strncpy(files[len-1],argv[i],strlen(argv[i]));
indicizza(f); //indicizziamo tutte le parole del file e le aggiungiamo nell'albero
fclose(f);
}
else
fprintf(stderr,"Errore nella lettura dal file %s",argv[i]);

};
//salviamo il nuovo file indice
fp=fopen("index","w");
scrivi_su_file(fp);
fclose(fp);
return 0;



Ho debbuggato il tutto e ho notato che tutte le parole del quarto file vengono lette e correttamente inserite nel file (tant'è che la funzione indicizza ritorna senza problemi) ma (sorpresa!) il programma abortisce nel momento in cui va a fare la fclose(f), stampandomi il messaggio di cui sopra.

Qualcuno può arrivare ad intuire il problema?Spero di essere stato abbastanza chiaro....
Grazie!

Loading