Giải phóng danh sách liên kết

Thắc mắc về giải phóng bộ nhớ động trong danh sách liên kết

programming
linked-list
svictu (Van Cuong) December 27, 2020, 9:09am #1

Mọi người cho em hỏi: khi cấp phát bộ nhớ động cho các bài toán về danh sách liên kết trong C thì khi kết thúc trương trình không phải giải phóng bộ nhớ động đã cấp phát ra ạ? Em mới học về danh sách liên kết đơn, tìm tài liệu trên mạng cũng chỉ thấy cấp phát động ra nhưng cuối cùng thì không có giải phóng bộ nhớ động đã cấp phát ạ. Nếu phải giải phóng bộ nhớ động thì cho em xin ví dụ đơn giản về phần này được không ạ?

1 Like
Rok_Hoang (Minh Hoàng) May 3, 2015, 2:54am #2

Nếu đã cấp phát động thì phải giải phóng chứ

Giải phóng danh sách liên kết
còn giải phóng DSLK thì chỉ cần cho duyệt và hủy từng node thôi.

2 Likes
svictu (Van Cuong) May 3, 2015, 9:18am #3

cảm ơn anh nhá

Giải phóng danh sách liên kết

huyenthoai (Interns) October 19, 2015, 5:04am #4

@Rok_Hoang nếu như mình không tự giải phóng thì máy nó có tự huỷ vùng nhớ đó khi thoát khỏi chương trình không nhỉ.

Rok_Hoang (Minh Hoàng) October 19, 2015, 10:43am #5

Bạn hỏi về máy thì mình cũng không rõ là hệ điều hành có cơ chế hủy vùng nhớ không, mình nghĩ là không.
Đối với ngôn ngữ thì C/C++ thì không tự hủy vùng nhớ cấp phát động được, ngoài ra thì C++ có smart pointer cũng hỗ trợ một phần việc giải phóng nhưng sử dụng không tốt thì phiền phức.
Java thì có Garbage Collect để hủy vùng nhớ giùm mình.

1 Like
Pham_Van_Hai (Pham Van Hai) October 19, 2015, 11:46am #6

sau khi chương trình kết thúc, hệ điều hành (hiện đại) sẽ giải phóng tài nguyên mà chương trình đã dùng.
Bạn có thể tham khảo thêm ở đây:

stackoverflow.com

When you exit a C application, is the malloc-ed memory automatically freed?

c, memory-management
4 Likes
huyenthoai (Interns) October 19, 2015, 3:01pm #7

Mình đọc nhưng vẫn chưa hiểu do tiếng anh kém

Giải phóng danh sách liên kết
.Thầy mình bảo rằng một số hệ điều hành hoặc một số ngôn ngữ có cơ chế tự giải phóng nhưng chỉ giải phóng tầm 60-70% vùng nhớ chắc chắn không sử dụng đến nữa,vì khi kết thúc chương trình có một số vùng nhớ hệ điều hành sẽ không biết ta có sử dụng chúng nữa không. Nếu đúng như thế thì khi kết thúc chương trình thì chứng tỏ ta đâu còn sử dụng đến vùng nhớ đó nữa đâu sao thầy nói là hệ điều hành sẽ không biết ta có sử dụng chúng nữa không

2 Likes