有人能解释一下这个错误意味着什么吗?
如果图像不清晰,则为错误:
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.
答案 0 :(得分:0)
这意味着内存分配/释放功能已在堆中检测到严重问题,意味着使用它可能不安全。
要理解这一点,要意识到堆几乎总是由数据块和控制信息混合在内存中(并非完全需要,但大多数实现可能会这样做)。
如果您在分配的块的末尾写入,那么您可能会损坏某些控制信息,例如:
char *twoBytes = malloc(2);
memset (twoBytes, '\0', 10000);
即使假设在两个字节的末尾有一些空闲空间来使分配有效(并且作为开发人员,你应该从不假设这一点),写入一万字节几乎肯定会造成一些严重的伤害。
不幸的是,堆中的错误很少在它们发生的地方被发现,所以你需要检查你的代码,看看你可能在缓冲区末尾写的地方。另一种方法是使用valgrind
之类的工具来检测可疑写入。