私は、このスタックトレースでハングするスレッドを実行しています(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