【问题标题】:Mysterious malloc: sysmalloc: Assertion failed error神秘的 malloc: sysmalloc: Assertion failed 错误
【发布时间】:2013-10-20 11:04:05
【问题描述】:

我遇到了一个神秘的错误,我不知道为什么。此代码在失败之前运行了多次,并且总是在同一点失败。

这是我的代码:

    assert(size > 0);
    int* sorted = malloc(size * sizeof(int));

这是我运行它时遇到的错误:

    malloc.c:2369: 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。在失败之前,此代码会以不同的大小值(包括 1)运行多次。

有人知道我做错了什么吗?

谢谢。

【问题讨论】:

  • @ouah 我认为该行是 malloc 函数本身的一部分,而不是海报代码的一部分;他可能没有那个图书馆的来源。
  • @mah 对,我没注意到是malloc:2369,我以为在他的源代码里。

标签: c malloc assert


【解决方案1】:

这通常发生在您的代码 freed 之前某个时间的地址无效,或者写入超过分配的内存块的末尾时。通过 valgrind 或其他一些内存分析器运行您的代码,以查看发生这种情况的点。

【讨论】:

  • 我每次使用免费时都尝试注释掉。我仍然收到错误消息。
  • @Ian 然后查找分配内存的位置,看看您是否始终提供正确的sizeof,以及该内存的索引是否正确。这是最严重的错误,如果没有内存分析器,很难找到它们。
  • 我尝试通过valgrind运行代码,发现了一些错误。我将尝试修复它们以查看错误是否消失。谢谢!
  • 就是这样!我在记忆之外阅读,这导致我后来在记忆之外写作。
猜你喜欢
  • 2015-10-13
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2015-03-13
  • 2017-04-20
  • 2014-06-07
  • 1970-01-01
相关资源
最近更新 更多