未知的分段错误

Unknown segmentation fault error

谁能解释一下这个错误是什么意思?

如果图片不清晰,就是这个错误:

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.

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

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

如果您写入超出已分配块的末尾,则可能会破坏某些控制信息,例如:

char *twoBytes = malloc(2);
memset (twoBytes, '[=10=]', 10000);

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

不幸的是,堆中的错误很少在它们发生的地方附近被检测到,因此您需要检查您的代码以查找您可能在缓冲区末端之外写入的地方。另一种选择是使用 valgrind 之类的工具来检测可疑写入。