未知的分段错误错误

时间:2015-03-18 13:18:53

标签: c segmentation-fault malloc

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.

1 个答案:

答案 0 :(得分:0)

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

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

如果您在分配的块的末尾写入,那么您可能会损坏某些控制信息,例如:

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

即使假设在两个字节的末尾有一些空闲空间来使分配有效(并且作为开发人员,你应该从不假设这一点),写入一万字节几乎肯定会造成一些严重的伤害。

不幸的是,堆中的错误很少在它们发生的地方被发现,所以你需要检查你的代码,看看你可能在缓冲区末尾写的地方。另一种方法是使用valgrind之类的工具来检测可疑写入。