Smoke666
27-03-2012, 13:03
Ciao a tutti, ho un problema con un segmentation fault generato nel momento in cui viene invocata la funzione calloc. Tuttavia il problema si pone in un punto ben preciso del mio programma, perchè tutte le altre altre parti che utilizzano tale funzione vanno a buon fine...Posto un po di codice per farvi capire meglio.
scheda_t* new_scheda()
{
scheda_t* s=calloc(1, sizeof(scheda_t)); //segfault alla seconda iterazione, la prima va a buon fine....
if(s==NULL) return;
s->autore = NULL;
return s;
}
void free_scheda(**ps)
{
if( (ps == NULL) || (*ps == NULL) ) return;
else{
((**ps).autore) = NULL;
memcpy(((*ps)->titolo), STRING_NULL, sizeof((*ps)->titolo));
memcpy(((*ps)->nota), STRING_NULL, sizeof((*ps)->nota));
memcpy(((*ps)->collocazione), STRING_NULL, sizeof((*ps)->collocazione));
memcpy(((*ps)->descrizione_fisica), STRING_NULL, sizeof((*ps)->descrizione_fisica));
*ps= NULL;
}
free(*ps);
free(&ps);
}
funzione1
........ //dichiara le sue cose
scheda_t* s=new_scheda();
........//continua senza problemi alla prima chiamata.
main()
c=funzione1 //termina con successo
free_scheda();
funzione1() //ha come argomento c calcolato dalla prima invocazione della funzione
Come avrete capito scheda_t è un tipo da me definito che contiene delle stringhe, le inizializzo copiando dentro ognuna di loro una stringa nulla. Non capisco perchè solo durante quella chiamata la calloc mi da il segfault...Aiutatemi voi! :dhò:
scheda_t* new_scheda()
{
scheda_t* s=calloc(1, sizeof(scheda_t)); //segfault alla seconda iterazione, la prima va a buon fine....
if(s==NULL) return;
s->autore = NULL;
return s;
}
void free_scheda(**ps)
{
if( (ps == NULL) || (*ps == NULL) ) return;
else{
((**ps).autore) = NULL;
memcpy(((*ps)->titolo), STRING_NULL, sizeof((*ps)->titolo));
memcpy(((*ps)->nota), STRING_NULL, sizeof((*ps)->nota));
memcpy(((*ps)->collocazione), STRING_NULL, sizeof((*ps)->collocazione));
memcpy(((*ps)->descrizione_fisica), STRING_NULL, sizeof((*ps)->descrizione_fisica));
*ps= NULL;
}
free(*ps);
free(&ps);
}
funzione1
........ //dichiara le sue cose
scheda_t* s=new_scheda();
........//continua senza problemi alla prima chiamata.
main()
c=funzione1 //termina con successo
free_scheda();
funzione1() //ha come argomento c calcolato dalla prima invocazione della funzione
Come avrete capito scheda_t è un tipo da me definito che contiene delle stringhe, le inizializzo copiando dentro ognuna di loro una stringa nulla. Non capisco perchè solo durante quella chiamata la calloc mi da il segfault...Aiutatemi voi! :dhò: