View Full Version : [c] segmentation fault sulla funzione strdup()
agosteeno
24-03-2010, 18:45
Salve a tutti ho questa funzione:
void * copy_string(void * a) {
char * _a;
if ( ( _a = strdup(( char * ) a ) ) == NULL ) return NULL;
return (void *) _a;
}
Serve per copiare stringhe con liste generiche. Il mio problema e' che mi da' segmentation fault la strdup senza che io riesca a capire perche'! La stringa che gli arriva in ingresso sembra corretta: "A very merry unbirthday to you, to you.".
Qualcuno ha un idea in proposito? Nn riesco a capire cosa possa essere...
agosteeno
24-03-2010, 18:46
Salve a tutti ho questa funzione:
void * copy_string(void * a) {
char * _a;
if ( ( _a = strdup(( char * ) a ) ) == NULL ) return NULL;
return (void *) _a;
}
Serve per copiare stringhe con liste generiche. Il mio problema e' che mi da' segmentation fault la strdup senza che io riesca a capire perche'! La stringa che gli arriva in ingresso sembra corretta: "A very merry unbirthday to you, to you.".
Qualcuno ha un idea in proposito? Nn riesco a capire cosa possa essere...
nn posso modificare la funzione perche' e' un test...
wingman87
24-03-2010, 19:00
La stringa in input termina con il carattere nullo?
agosteeno
25-03-2010, 09:54
Ciao, si, lo fa'. E' dichiarata in questo modo:
static char *strings[] = {
... ,
"A very merry unbirthday to you, to you.",
...
};
dove i puntini stanno per altre stringhe dichiarate alle stesso modo. Il problema e' che con le stringhe precendenti nn da' questo problema. Oltretutto ho provato a fare dei test per vedere in quali casi da' segmentation fault (tipo passare un intero invece di una stringa, il valore NULL...), e il debugger evindezia sempre il problema (per es dice che e' la strlen all'interno della strdup che da' problemi). Nel caso in questione invece il debugger mi scrive che nn sa' dove sia l'errore. Sicuramente e' un problema della malloc interna, ma nn capisco come si possa risolvere.
agosteeno
25-03-2010, 10:01
Per essere precisi scrive (il compilatore e' ddd):
0xb7e0d998 in ?? () from /lib/tls/i686/cmov/lib.so.6
Ho capito che era strdup a dare errore perche' ho seguito l'esecuzione passo passo...
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.