2012-08-31 10 views
14
void log(){ 
    time_t current = time(0); 
    tm *ptm = localtime(&current); 
     stuf... 
} 

Chỉ muốn chắc chắn - tôi có cần giải phóng bộ nhớ được cấp phát con trỏ tm ở cuối phương thức không?Bộ nhớ cho giờ địa phương có cần phải được deallocated?

+0

bản sao có thể có của [Cấu trúc kết quả của thời gian cục bộ được phân bổ trong C?] (Http://stackoverflow.com/questions/8694365/how-is-the-result-struct-of-localtime-allocated-in- c) – user

+0

Ngoài ra, hãy xem [Làm thế nào để giải quyết sự rò rỉ dyld và cục bộ khi lập hồ sơ dự án?] (http://stackoverflow.com/q/10105181) – jww

Trả lời

20

Không, bạn không nên giải quyết nó, cấu trúc được phân bổ tĩnh.

Kiểm tra documentation:

Return giá trị
con trỏ đến một tĩnh std::tm đối tượng bên trong trên thành công, hoặc NULL khác. Cấu trúc có thể được chia sẻ giữa std::gmtime, std::localtimestd::ctime và có thể bị ghi đè trên mỗi lệnh gọi.

+0

bạn có ý nghĩa gì khi phân bổ tĩnh? dosnt nó được phân bổ trên heap bởi việc thực hiện localtime? –

+0

@ user1495181: Đã thêm tham chiếu cho bạn. –

+1

s/không nên/không được/ –

5

Không, bạn không nên. Cấu trúc này được phân bổ tĩnh và chia sẻ bởi các hàm gmtimelocaltime. Mỗi lần một trong hai hàm này được gọi là nội dung của cấu trúc này sẽ bị ghi đè.

Vì vậy, hãy cẩn thận với kết quả - ví dụ: sao chép chúng ngay lập tức và không lưu trữ con trỏ.