gpt4 book ai didi

memory-management - 'corrupted double-linked list'是什么意思

转载 作者:行者123 更新时间:2023-12-03 07:30:25 26 4
gpt4 key购买 nike

我最近从 PHP 中收到以下错误:

WARNING: [pool www] child 42475 said into stderr: "*** glibc detected *** php-fpm: pool www: corrupted double-linked list: 0x00000000013fe680 ***"

我对这个问题不太困扰,也不太有兴趣解决它。但我非常有兴趣了解这个错误“损坏的双链表”的实际含义,因为我以前没有见过它。我相信知道什么是双链表,但我未能生成触发此错误的程序。

有人可以给我提供一小段代码,当我编译和执行它时,它会导致 glibc 说“损坏的双链表”吗?

最佳答案

我自己找到了问题的答案:)

所以我不明白的是 glibc 如何区段错误和损坏的双链表,因为根据我的理解,从 glibc 的角度来看它们应该看起来像同一件事。因为如果我在程序中实现一个双链表,glibc 怎么可能知道这是一个双链表,而不是任何其他结构体?它可能不能,所以这就是我感到困惑的原因。

现在我查看了 glibc 代码中的 malloc/malloc.c,我看到以下内容:

1543 /* Take a chunk off a bin list */
1544 #define unlink(P, BK, FD) { \
1545 FD = P->fd; \
1546 BK = P->bk; \
1547 if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) \
1548 malloc_printerr (check_action, "corrupted double-linked list", P); \
1549 else { \
1550 FD->bk = BK; \
1551 BK->fd = FD; \

所以现在这突然有意义了。 glibc之所以能知道这是一个双链表,是因为该链表是glibc本身的一部分。我一直很困惑,因为我认为 glibc 可以以某种方式检测到某些编程正在构建双链表,但我不明白它是如何工作的。但如果它所说的这个双链表是 glibc 本身的一部分,它当然可以知道它是一个双链表。

我仍然不知道是什么触发了这个错误。但至少我了解损坏的双链表和段错误之间的区别,以及 glibc 如何知道这个结构应该是双链表:)

关于memory-management - 'corrupted double-linked list'是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14897157/

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