Napotkałem błąd segmentacji przewodowej. Zajmuję się tworzeniem oprogramowania w C przy użyciu Eclipse CDT. Podczas uruchamiania mojego programu na terminalu (Ubuntu 10, 64bits), po prostu zgłasza "Błąd segmentacji". Jednak kiedy debuguję używając gdb w Eclipse, to idzie do końca, a wynik jest poprawny.Błąd segmentacji podczas pracy, ale powodzenie podczas debugowania
Rozumiem, że może być wiele przyczyn błędów segmentacji. Przykro mi, że nie mogę pokazać kodu, ponieważ nie wiem, gdzie może być problem ...
Ale czy ktoś mógłby mi pomóc, czy istnieje jakakolwiek sytuacja, która mogłaby się zdarzyć w moim przypadku: błąd segmentacji na terminalach, a dobrze w debugowaniu? Dzięki wielkie.
Dzięki, wszystkie. Spędziłem trochę czasu na uczeniu się valgrind. Naprawiłem błąd, zastępując malloc() przez realloc(). Po wywołaniu następuje dwa memcpy. Czy to jest powód? Oto kod fragmentu kodu:
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;
}
Czy ktokolwiek może pomóc wyjaśnić, dlaczego?
Prawdopodobne uszkodzenie stosu i/lub sterty. Upewnij się, że włączasz pełne ostrzeżenia na kompilatorze i radzisz sobie z nimi wszystkimi. Niedopasowane argumenty do 'printf' i podobne rzeczy są rzeczami, na które należy zwrócić uwagę. – Mat
Uruchom program pod adresem [valgrind] (http://valgrind.org/), problem prawdopodobnie stanie się oczywisty. – Hasturkun