gpt4 book ai didi

c - NETBSD 3.1 错误 - 在 malloc() : warning: recursive call

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:03 24 4
gpt4 key购买 nike

测试场景是 ping 来 IP 和 ctr+C 从脚本中交替调用。

似乎当信号处理程序被调用时,ping 是在 malloc 中。信号处理程序还调用了 malloc,并且 malloc 返回了以下警告。 在 malloc() 中:警告:递归调用

但我仍然找不到它是如何导致崩溃的,有人可以解释一下吗

最佳答案

啊,使用不可重入函数的可怕信号处理程序问题。

问题是 *BSD ping 的功能添加维护人员从一开始就押注于安全地做事。

FreeBSD 在 1994 年添加了这个问题,并在 1996 年注意到了它,并开始采取本应比实际更短的方法来解决这个问题,并在 1998 年的某个时候进行了最终修复。

OpenBSD 在 1997 年添加了这个问题,在 2002 年注意到了它,但完全忽略了问题的本质,直到 2015 年才正确、彻底地修复它。

NetBSD 在 1996 年添加了这个问题,但是正如您所发现的,它还没有被修复。 NetBSD 可能应该导入 OpenBSD ping。

问题既不是 malloc() 也不是任何 STDIO(包括 printf())都是可重入的,这是信号处理程序中使用的所有代码的必要条件。

有许多更好的地方可以找到重入、信号处理程序问题等的描述,但也许这个问题及其接受的答案(以及一些相关问题)将是一个好的开始:

Why are malloc() and printf() said as non-reentrant?

关于c - NETBSD 3.1 错误 - 在 malloc() : warning: recursive call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38005569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com