Tôi đang phát triển một dự án trong C và tôi cần giải phóng bộ nhớ được cấp phát và cũng đóng tất cả các tệp đang mở trước khi thoát.Tồn tại một cách để giải phóng bộ nhớ trong atexit hoặc tương tự mà không sử dụng các biến toàn cầu?
Tôi quyết định triển khai chức năng clean
sẽ thực hiện tất cả những thứ này và gọi nó bằng atexit
vì có rất nhiều tình huống thoát có thể xảy ra.
Vấn đề là atexit
không cho phép tôi đặt chức năng với thông số, vì vậy tôi không thể gửi tới clean
các con trỏ cần được giải phóng vào cuối quá trình.
Vì vậy, tôi cần phải khai báo là biến toàn cầu, mỗi con trỏ có thể cần được giải phóng và mọi tệp có thể còn mở trong chương trình? (Tôi đã làm điều đó nhưng không có vẻ tốt) hoặc không tồn tại một chức năng tương tự như atexit
cho phép gửi các tham số? hoặc nhiều hơn có lẽ có một cách khác mà tôi đang mất tích?
Bạn chỉ cần một biến trỏ đến hồ bơi bộ nhớ. Điều đó có vẻ chấp nhận được. – this
Nếu bạn đang sử dụng hệ điều hành tiêu dùng hiện đại thì tất cả các tài nguyên sẽ được phát hành khi bạn thoát. Điều đó có nghĩa là tất cả bộ nhớ được phân bổ sẽ được giải phóng, tất cả các tệp đang mở sẽ bị đóng, v.v. –
Ngoài ra, nếu bạn có, ví dụ: các tệp cần phải mở trong suốt quá trình chạy, sau đó bạn cũng có thể truy cập vào nhiều vị trí và điều đó có nghĩa là nó đã là biến toàn cầu hoặc ít nhất toàn cục trong một đơn vị dịch, và sau đó bạn có thể đóng chức năng tệp đó được gọi từ hàm 'clean_all' toàn cục. Cùng với bộ nhớ bạn phân bổ. –