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

그냥 확실하길 원한다 - 메소드 끝 부분에 할당 된 메모리 포인터를 해제해야합니까?localtime에 대한 메모리를 할당 해제해야합니까?

+0

가능한 복제본 [로컬 시간의 결과 구조체는 C에서 어떻게 할당 되었습니까?] (http://stackoverflow.com/questions/8694365/how-is-the-result-struct-of-localtime-allocated-in- c) – user

+0

[프로젝트를 프로파일 링 할 때 dyld 및 localtime 누수를 해결하는 방법?] (http://stackoverflow.com/q/10105181) – jww

답변

20

아니요 할당을 취소하면 안됩니다. 구조체가 정적으로 할당됩니다.

확인 documentation : 정적 내부 std::tm 객체, 그렇지 않으면 성공, 또는 NULL-
포인터

반환 값. 구조는 std::gmtime, std::localtimestd::ctime 사이에서 공유 될 수 있으며 각 호출시 겹쳐 쓸 수 있습니다.

+0

정적으로 할당된다는 것은 무엇을 의미합니까? 로컬 시간 구현에 의해 힙에 할당 된 dosnt? –

+0

@ user1495181 : 참조가 추가되었습니다. –

+1

/should// should//하지 않아야합니다/ –

5

아니요, 아니요. 이 구조체는 정적으로 할당되고 함수 gmtimelocaltime에 의해 공유됩니다. 이 함수 중 하나가 호출 될 때마다이 구조의 내용을 덮어 씁니다.

결과에주의하십시오. 예 : 즉시 복사하고 포인터를 저장하지 마십시오.

관련 문제