Ho riscontrato un errore di segmentazione cablato. Sto sviluppando un software in C utilizzando Eclipse CDT. Quando si esegue il mio programma sul terminale (Ubuntu 10, 64 bit), riporta semplicemente "Errore di segmentazione". Tuttavia, quando eseguo il debug usando gdb in Eclipse, questo va alla fine e il risultato è corretto.Errore di segmentazione durante l'esecuzione, ma successo durante il debug
Capisco che potrebbero esserci molte ragioni per i difetti di segmentazione. E mi dispiace di non essere in grado di mostrare il mio codice poiché non so dove potrebbe essere il problema ...
Ma qualcuno potrebbe aiutarmi, c'è una situazione che potrebbe accadere nel mio caso: errore di segmentazione sui terminali, mentre va bene nel debugging? Grazie mille.
Grazie, tutto. Avrei passato un po 'di tempo ad imparare Valgrind. Ho corretto il bug sostituendo un malloc() di realloc(). La chiamata è seguita da due memcpy. È questa la ragione? Ecco il codice snippet:
bwa_seq_t *merge_seq (bwa_seq_t *s1, bwa_seq_t *s2) {
ubyte_t *seq1, *seq2, *tmp;
if (!s1 || !s2)
return 0;
seq1 = s1->seq;
seq2 = s2->seq;
tmp = (ubyte_t*) calloc (sizeof(ubyte_t), (s2->len + s1->len + 1));
memcpy(tmp, seq1, sizeof(ubyte_t) * s1->len);
memcpy(&tmp[s1->len], seq2, sizeof(ubyte_t) * s2->len);
s1->len += s2->len;
tmp[s1->len] = '\0';
s1->seq = tmp;
return s1;
}
Qualcuno può spiegare perché?
È probabile che si verifichi un errore di stack e/o heap. Assicurati di abilitare tutti gli avvisi sul compilatore e gestirli tutti. Argomenti non corrispondenti a 'printf' e cose del genere sono cose a cui prestare attenzione. – Mat
Esegui il tuo programma in [valgrind] (http://valgrind.org/), il problema sarà probabilmente evidente. – Hasturkun