Memory leak: Có nên xóa pointer sau khi xóa danh sách liên kết?

Mình có 1 cái danh sách liên kết. Mình cần xóa toàn bộ nó. Mình viết 1 cái hàm như sau. Không xét trường hợp tham số truyền vào là null. Cái đó không quan trọng lúc này. Nếu cần xét thì thêm 2 dòng code thôi.

void deleteList(Node* head){
    Node* current = head;
    Node* next = 0;
    while(current != 0) {
        next = current->next;
        delete(current);
        current = next;
    }
}

Cho mình hỏi mình có bị leak memory không vậy? Mình cần xóa current và next ko?

  • Không cần thiết check null vì while đã check null rồi.
  • Không leak :smiley: nếu ds code đúng.
  • current == NULL rồi thì ko có gì để delete cả.
2 Likes

Hi Anh Nguyen.

  1. Nếu bạn code C++ thì có thể đổi qua dùng thư viện hoặc dùng con trỏ thông mình.
  2. Bạn có thể in log trong hàm khởi tạo và hàm hủy rồi kiểm tra nhưng nhìn thì có vẻ OK.

Chỉ có 1 cái phải sửa trong đoạn code này là thay 0 bằng nullptr (từ C++11 trở đi). So sánh 1 con trỏ với 0 tối nghĩa lắm

2 Likes

cám ơn bạn. Mình sẽ chú ý cái này. :slight_smile:

bạn comment giúp đỡ mình khá nhiều. Cám ơn bạn. Nếu bạn để ý thì mấy câu mình hỏi toàn không được dùng STL.

Mình học C++ nhưng mấy cái stl không được dùng. Mình phải viết tay gần như mọi thứ. Kiến thức học và nhớ được cũng nhiều nhưng lỗ hổng thì vẫn có. Lâu lâu lại đi hỏi mấy câu như vầy.

cám ơn bạn. Mình thích cách trả lời này :slight_smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?