Riccardo4444 (Normal User)
Newbie
Messaggi: 7
Iscritto: 21/12/2010
|
Ciao
Sto scrivendo un programma, ma arrivato ad un certo punto esso fa cose inappropriate. Da ciò che sono riuscito a capire usando il debugger GDB, questo comportamento anormale è dovuto, molto probabilmente, ad una funzione che chiamo nella funzione principale, ovvero compare(), la quale "modifica", in un certo senso, il comportamento della stringa _ipstr che le passo quando questa successivamente interagisce in altri modi nel programma. In particolare, quando faccio il debug del mio programma, passo-passo, con GDB, arrivato al punto di compare(), se premo s, GDB non accede alla funzione e non continua neance il debug riga per riga, bensì fa continuare il programma da solo fino alla fine.
Ecco il codice di compare(), se vi dovessero essere dei problemi:
Codice sorgente - presumibilmente C++ |
int compare(char *_ipstr, char *_filename) { char _ipbuf[IPBUFSIZ+1]; while (1) { if (fgets(_ipbuf, IPBUFSIZ+1, list) != NULL) { if (!strcmp(_ipbuf, _ipstr)) return -1; } else if (ferror(list)) { fprintf(stderr, "Cannot read %s.\n", _filename); exit(2); } else return 0; } }
|
Ultimi chiarimenti: uso Linux, con compilatore GCC (ho specificato l'opzione -g per il debug). Quest'ultimo non mi dà nessun errore nella compilazione, e tra l'altro ho già testato le altre parti del programma (tra cui l'integrità del file segnato da list), che sono a posto. IPBUFSIZ nel programma ha valore 15.
|