c – 为什么malloc不返回?
发布时间:2020-12-16 06:53:33 所属栏目:百科 来源:网络整理
导读:我有一个运行的线程(OS X 10.10.5)与此堆栈跟踪挂起.这是在大约20个小时的操作之后,可能与低内存条件有关.但是,问题是,为什么malloc不返回null?为什么线程的执行需要停止?请求的实际字节数很小(对于路径上的字符串操作). std::wstring finalPath = itsPath
我有一个运行的线程(OS X 10.10.5)与此堆栈跟踪挂起.这是在大约20个小时的操作之后,可能与低内存条件有关.但是,问题是,为什么malloc不返回null?为什么线程的执行需要停止?请求的实际字节数很小(对于路径上的字符串操作).
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 失败的操作的目的是清除临时目录,以便引导磁盘不会填满程序生成的临时文件.此过程失败,磁盘确实填满,线程停止(如实际停止,并且主线程连接到它),并且从磁盘删除文件的过程停止.此外,由于线程已停止,因此必须终止该进程.我不知道你是否可以把它称为一个bug,因为失败的过程是试图阻止实际发生的事情. 感谢您的见解. 解决方法
你提到磁盘已满,所以内核可能正试图将内存换成磁盘而失败.在这种情况下,macOS暂停,而不是杀死失控过程.这个想法是你释放一些空间和/或关闭其他一些应用程序,然后恢复暂停的过程,例如使用kill -CONT< PID>.
听到它的声音,真正的问题是你分配了太多的内存,或者泄漏了内存. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |