malloc.c 3096有什么问题

malloc.c 3096有什么问题,c,malloc,C,Malloc,我在运行使用整数3D指针和正常整数变量的c程序时遇到的错误在malloc中没有问题,错误在您自己的代码中。很可能是您在先前分配的内存块之前或之后重写了内存。或者您释放了一个块,然后写入了它 也可能是分配了太多内存而没有释放,或者是太少的malloc不喜欢负数。通常最后2个不会导致断言,但每个平台都有自己的怪癖 有很多方法可以搞乱malloc的头….在调用malloc之前,您可能已经破坏了堆。过度分配内存不应该让malloc返回NULL吗?malloc接受一个size\u t变量,所以如果您能够给

我在运行使用整数3D指针和正常整数变量的c程序时遇到的错误

在malloc中没有问题,错误在您自己的代码中。

很可能是您在先前分配的内存块之前或之后重写了内存。或者您释放了一个块,然后写入了它

也可能是分配了太多内存而没有释放,或者是太少的malloc不喜欢负数。通常最后2个不会导致断言,但每个平台都有自己的怪癖


有很多方法可以搞乱malloc的头….

在调用malloc之前,您可能已经破坏了堆。过度分配内存不应该让malloc返回NULL吗?malloc接受一个size\u t变量,所以如果您能够给它一个负数,我会向您表示祝贺;这个断言显然是被抛出的,因为他覆盖了一些内部数据结构。但是他可能想说malloc不喜欢负数,为什么要留给想象和逻辑推理:一个负数对malloc来说是一个非常巨大的数字,这是一个问题。@Shin但从mallocs的角度来看,没有负数-当然,巨大的正数将是一个问题,尽管它清楚地定义了在这种情况下会发生什么,这并不是一个断言失败,但malloc永远不会处理负数。这就好比说malloc将正确地处理浮点参数,因为这些参数也会转换为大小\u t,是吗?这样想,但不是100%确定,这不是一个常见的问题;所以我们可以说malloc也有浮动的问题。这只是一个哲学问题:事实上malloc根本看不到浮点数或负数,这意味着使用malloc是一个问题,因此malloc不喜欢这些类型,它拒绝它们,因为它根本不知道/看不到它们。只是开玩笑,但这条评论似乎在语义/哲学细节中丢失了。我找到了问题的解决方案。。。。。。实际上,当任何内存块丢失或在未创建内存时尝试访问时,都会发生这种情况。当您使用int数据而不是int*等创建时,也会发生这种情况。。。并尝试访问int*类型的
> malloc.c:3096: 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.