Почему malloc не возвращается?

У меня работает поток (OS X 10.10.5), который зависает с этой трассировки стека. Это примерно после 20 часов работы, вероятно, связано с нехваткой памяти. Но вопрос в том, почему 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

Цель неудачной операции — очистить временный каталог, чтобы загрузочный диск не заполнялся временными файлами, созданными программой. Этот процесс завершается неудачно, диск действительно заполняется, поток останавливается (как на самом деле останавливается, и основной поток присоединяется к нему), и процесс удаления файлов с диска останавливается. Кроме того, процесс должен быть остановлен, потому что поток остановлен. Я не знаю, можно ли это точно назвать ошибкой, поскольку сбойный процесс — это попытка предотвратить то, что на самом деле происходит.

Спасибо за ваши идеи.

4

Решение

Вы упоминаете, что диск заполнен, поэтому ядро, вероятно, пытается выгрузить память на диск и не работает. В этой ситуации macOS приостанавливает, а не убивает неконтролируемые процессы. Идея состоит в том, что вы освобождаете некоторое пространство и / или закрываете некоторые другие приложения, а затем возобновляете приостановленный процесс, например, используя kill -CONT <PID>,

Судя по всему, реальная проблема заключается в том, что вы выделяете слишком много памяти или теряете память.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]