gpt4 book ai didi

c - 未知的段错误

转载 作者:行者123 更新时间:2023-11-30 21:10:37 25 4
gpt4 key购买 nike

enter image description here

有人可以解释一下这个错误的含义吗?

如果图像不清晰,这是错误:

Main: malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long) old_end & pagemask) == 0)' failed.

最佳答案

这意味着内存分配/释放函数检测到堆中存在严重问题,这意味着继续使用它可能不安全。

要理解这一点,请认识到堆几乎总是由混合在内存中的数据 block 控制信息组成(并非完全必需,但大多数实现可能会这样做)。

如果您的写入超出了已分配 block 的末尾,则可能会损坏一些控制信息,例如:

char *twoBytes = malloc(2);
memset (twoBytes, '\0', 10000);

即使假设两个字节末尾有一些可用空间来提高分配效率(作为开发人员,您永远不应该假设这一点),写入一万个字节几乎肯定会导致一些严重的损坏。

不幸的是,堆中的错误很少在发生位置附近被检测到,因此您需要检查代码以查找可能超出缓冲区末尾的写入位置。另一种选择是使用像 valgrind 这样的工具来检测可疑写入。

关于c - 未知的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29123182/

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