이 스택 추적과 함께 실행되는 스레드가 있습니다 (OS X 10.10.5). 그것은 약 20 시간의 작동 후, 아마 낮은 기억 상태와 관련이 있습니다. 그러나 문제는 malloc이 null을 반환하는 이유는 무엇입니까? 스레드 실행이 중단되어야하는 이유는 무엇입니까? 요청 된 실제 바이트 수는 작습니다 (경로의 문자열 연산의 경우). 부팅 디스크가 프로그램에 의해 생성 된 임시 파일과 함께 기입하지 않도록왜 malloc이 반환되지 않습니까?
std::wstring finalPath = itsPath.substr(0,ls+1);
1 operator new(unsigned long) + 37 (libc++abi.dylib + 124485) [0xa0339645] 2
1 malloc + 29 (libsystem_malloc.dylib + 3997) [0xa1829f9d] 2
1 malloc_zone_malloc + 116 (libsystem_malloc.dylib + 7243) [0xa182ac4b] 2
1 default_zone_malloc + 3 (libsystem_malloc.dylib + 67909) [0xa1839945] 2
*1 thread_exception_return + 0 (kernel + 632362) [0xffffff800029a62a] (runnable) 2
실패 작업의 목적은 임시 디렉토리를 취소하는 것입니다. 이 프로세스는 실패하고 디스크는 실제로 채워지고 스레드는 중단되고 (실제로 중단되고 주 스레드가 조인됩니다) 디스크에서 파일을 삭제하는 프로세스가 중지됩니다. 또한 스레드가 중지되었으므로 프로세스를 종료해야합니다. 내가 실패한 프로세스가 실제로 일어나는 것을 막으려는 시도이기 때문에 당신이 정확히 이것을 버그라고 부를 수 있을지 모르겠습니다.
통찰력을 가져 주셔서 감사합니다.
* 아마도 메모리 부족 상태와 관련이 있습니다. * - 즉, 프로그램에 버그가 있습니다. – PaulMcKenzie
@ PaulMcKenzie, 왜 지구상에 있습니까? 버그가 없으면 낮은 메모리 조건을 초래하는 많은 시나리오가 있습니다. – SergeyA
'malloc'을 직접 호출하는 것처럼 보이지 않지만'new'를 호출합니다. 'new'는'no throw'를 사용하지 않는 한 던져 질 수 있으므로 문제가 될 수 있습니다. – NathanOliver