我遇到了有線分段錯誤。我正在用C++開發一個使用Eclipse CDT的軟件。在終端上運行我的程序時(Ubuntu 10,64位),它只是報告「分段錯誤」。但是,當我在Eclipse中使用gdb進行調試時,它會走到最後,結果是正確的。運行時出現分段錯誤,但在調試時成功
我知道可能有很多分段故障的原因。我很抱歉,我無法顯示我的代碼,因爲我不知道問題出在哪裏......
但任何人都可以請幫助我,是否有任何情況可能發生我的情況:分段故障在終端上,而在調試罰款?非常感謝。
謝謝,所有。我會花一些時間學習valgrind。我只是通過用realloc()替換一個malloc()來修復bug。調用之後是兩個memcpy。這是原因嗎?以下是代碼段:
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;
}
有沒有人可以幫忙解釋爲什麼?
棧和/或堆損壞的可能性較大。確保你在你的編譯器上啓用了完整的警告並處理所有的警告。對'printf'等錯誤的參數以及類似的東西都是需要注意的事情。 – Mat
在[valgrind](http://valgrind.org/)下運行你的程序,問題可能會變得很明顯。 – Hasturkun