Vì vậy, tôi cần trợ giúp. Tôi đang làm việc trên một dự án trong C++. Tuy nhiên, tôi nghĩ rằng tôi đã bằng cách nào đó quản lý để hỏng heap của tôi. Này được dựa trên thực tế là tôi đã thêm một std::string
để một lớp và gán cho nó một giá trị từ std::string
khác:Quản lý bộ nhớ, Heap Corruption và C++
std::string hello = "Hello, world.\n";
/* exampleString = "Hello, world.\n" would work fine. */
exampleString = hello;
treo trên hệ thống của tôi với một chồng đổ. Vì vậy, về cơ bản tôi cần phải dừng lại và thực hiện tất cả các công cụ quản lý mã và bộ nhớ của mình và tìm hiểu nơi tôi đã sửa chữa. Các codebase vẫn còn nhỏ (khoảng 1000 dòng), do đó, điều này là dễ dàng có thể.
Tuy nhiên, tôi vượt qua đầu của tôi với loại công cụ này, vì vậy tôi nghĩ tôi sẽ ném nó ra khỏi đó. Tôi đang trên một hệ thống Linux và đã poked xung quanh với valgrind
, và trong khi không biết hoàn toàn những gì tôi đang làm, nó đã báo cáo rằng destructor của std::string
là một không hợp lệ miễn phí. Tôi phải thừa nhận để nhận thuật ngữ 'Heap Corruption' từ tìm kiếm của Google; bất kỳ bài viết có mục đích chung nào về loại nội dung này cũng sẽ được đánh giá cao.
(Trong trước rm -rf ProjectDir
, làm một lần nữa trong C#: D)
EDIT: tôi đã không làm cho nó rõ ràng, nhưng những gì tôi yêu cầu cho nhiều cách một lời khuyên của chẩn đoán các loại của các vấn đề bộ nhớ. Tôi biết std :: string stuff là đúng, vì vậy nó là một cái gì đó tôi đã thực hiện (hoặc một lỗi, nhưng không có vấn đề với Chọn). Tôi chắc chắn rằng tôi có thể kiểm tra mã tôi đã viết lên và bạn rất thông minh folks sẽ thấy vấn đề trong thời gian không, nhưng tôi muốn thêm loại phân tích mã vào 'hộp công cụ' của tôi, như nó được.
+1, danh sách tốt! Tuy nhiên, tôi sẽ tranh chấp # 8 - trong khi nó ngăn chặn các truy cập 'xấu', nó thực sự là một mùi mã ẩn logic kém hoặc quản lý lâu đời đối tượng nghèo trong kinh nghiệm của tôi ... – Roddy
Ngày nay, C++ có con trỏ thông minh của riêng nó trong tiêu chuẩn thư viện, vì vậy không cần Boost hoặc Loki cho điều đó. –