Mac OS X에서 파일 시스템 알림이 필요하고/dev/fsevents에서 읽습니다. Mac OS X에서 fsevents 캡처의 샘플 코드 : http://www.codecollector.net/view/1066/raw_fsevents. 이 코드에서는/dev/fsevents에서 읽은 버퍼가 읽히는 즉시 처리되는 것을 볼 수 있습니다. 그러나 그렇게 할 때 처리 과정에서 지연이 발생하여 이벤트가 누락됩니다. 그래서 새로운 char 포인터를 만들고 memcpy는 버퍼를/dev/fsevents에서 읽고 새로운 char *을 큐에 추가하고 새로운 스레드에서 큐를 처리했습니다. 하지만 'print_event'처럼 'print_event'처럼 처리 할 때 'dump_entry'는 char * 포인터가 다시 정렬되고 처리 후 strlen()을 확인하면 0 바이트 또는 1 바이트 길이 만 표시됩니다. 따라서 처리 중에 메모리가 누출됩니다.Mac OS X의 fsevents watcher에서 메모리 누수
할당 된 char *을 삭제하는 방법에 대한 아이디어가 있으면 더 많은 메모리가 필요합니다. 이 점에 대해 의견을 나누십시오. 미리 감사드립니다.
답장을 보내 주셔서 감사합니다. 그 전에는 FSEvents 인터페이스가 안정적이지 않고 이벤트가 누락 될 수 있으며 디렉토리 수준의 알림 만받을 수있는 것처럼 보였습니다 (각 디렉토리마다 큐에 넣어야 함). 그리고 char * 할당과 관련하여 char *, 'entry = (entry_t *) (buf + len - remaining)에 대한 몇 가지 변경 사항을 알 수 있습니다. '코드에서. 따라서 char *가 완전히 처리 될 때, 삭제를 확인하면 char * 길이가 0이라고 표시됩니다. 이는 dump_entry 및 print_event 함수 호출 중에 char * 포인터가 비어 있음을 의미합니다. 어떻게이 누출을 멈출 수 있니?. –
malloc을 사용하여 새로운 메모리 포인터를 만들 때, 그것을 추적하십시오 (원래 포인터를 print_event로 전달하지 말고 복사본을 전달하십시오). 나중에 모든 메모리를 해제하기 위해 원래 포인터에서'free'를 호출 할 수 있습니다. –
다른 사본을 가져 가면 너무 맘에 들어야 겠지 ..? –