加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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>.

听到它的声音,真正的问题是你分配了太多的内存,或者泄漏了内存.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读