Tôi đã gặp phải lỗi phân đoạn có dây. Tôi đang phát triển một phần mềm trong C bằng Eclipse CDT. Khi chạy chương trình của tôi trên thiết bị đầu cuối (Ubuntu 10, 64 bit), nó chỉ đơn giản là báo cáo "Phân đoạn lỗi". Tuy nhiên, khi tôi gỡ lỗi bằng cách sử dụng gdb trong Eclipse, nó đi đến cuối và kết quả là chính xác.Lỗi phân đoạn khi chạy, nhưng thành công khi gỡ lỗi
Tôi hiểu rằng có thể có nhiều lý do cho lỗi phân đoạn. Và tôi xin lỗi vì tôi không thể hiển thị mã của mình vì tôi không biết vấn đề có thể ở đâu ...
Nhưng bất cứ ai có thể vui lòng giúp tôi, có tình huống nào có thể xảy ra như trường hợp của tôi hay không: lỗi phân đoạn trên thiết bị đầu cuối, trong khi tốt trong gỡ lỗi? Cám ơn rất nhiều.
Xin cảm ơn, tất cả. Tôi đã dành chút thời gian để học valgrind. Tôi chỉ sửa lỗi bằng cách thay thế một malloc() bởi realloc(). Cuộc gọi được theo sau bởi hai memcpy. Đó có phải là lý do? Đây là đoạn mã:
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;
}
Ai đó có thể giúp giải thích tại sao?
Có thể xảy ra sự cố tham nhũng và/hoặc đống. Hãy chắc chắn rằng bạn cho phép cảnh báo đầy đủ trên trình biên dịch của bạn và đối phó với tất cả chúng. Các đối số không khớp với 'printf' và những thứ như thế là những thứ cần tìm kiếm. – Mat
Chạy chương trình của bạn dưới [valgrind] (http://valgrind.org/), vấn đề này có thể sẽ trở nên rõ ràng. – Hasturkun