2009-11-30 38 views
20

Tôi gặp sự cố với một mã khá phức tạp. Tôi đã không thể tạo ra một đoạn mã ngắn tái tạo lỗi, vì vậy tôi sẽ cố gắng giải thích vấn đề bằng lời nói.Điều gì có thể gây ra lỗi "danh sách liên kết kép bị lỗi"?

Mã treo một cách ngẫu nhiên với lỗi

*** glibc detected *** gravtree: corrupted double-linked list: 0x000000001aa0fc50 *** 

Debugging cho thấy nó xuất phát từ đường, nơi các mã giải phóng một đối tượng. Dường như không có gì sai với đối tượng. Nó tồn tại và tôi có thể truy cập dữ liệu của nó tại thời điểm xảy ra lỗi. Destructor của đối tượng là tầm thường và không làm bất cứ điều gì.

Vì vậy, tôi bị kẹt. Trong trường hợp nào bạn mong đợi 'miễn phí' thất bại?

+8

Có vẻ như bạn có khả năng làm hỏng bộ nhớ của mình ở một nơi khác và đây chỉ là tác dụng phụ. –

Trả lời

11

Thử chạy chương trình của bạn dưới Valgrind. Nó có thể hướng bạn đến một nguyên nhân trước đó, trong khi gdb chỉ phá vỡ nơi thiệt hại đã xảy ra.

+1

Cảm ơn. Tôi sẽ cố gắng làm điều đó. Có thể đã tự nghĩ ra điều đó ... Nó thực sự rất chậm và vì tôi không thể tái tạo lỗi một cách dễ dàng, có thể mất một lúc. – hanno

+1

bạn đã giải quyết nó như thế nào ?? Bạn có bất kỳ ý tưởng nào như tại sao điều này xảy ra vì tôi có cùng một vấn đề? –

+2

@AmitBhaira: Tôi đã không giải quyết nó, và tôi không nghĩ rằng bình luận ở đây sẽ thu hút sự chú ý của hanno. Tôi hy vọng hanno chỉ cố gắng những gì tôi đề nghị, và rằng Valgrind cho anh ta thấy vấn đề đã làm hỏng danh sách của mình. Bạn đã thử Valgrind chưa? Không có một giải pháp đơn giản nào cho loại vấn đề này. Vấn đề tham nhũng bộ nhớ là nổi tiếng khó theo dõi, bởi vì họ có thể có rất nhiều nguyên nhân khác nhau, và hiệu ứng có thể nhìn thấy tham nhũng có thể xuất hiện xa nguyên nhân thực tế của thiệt hại ban đầu. –

Các vấn đề liên quan