【问题标题】:malloc.c:3074 error?malloc.c:3074 错误?
【发布时间】:2010-11-09 00:56:22
【问题描述】:

我在写C程序的时候遇到了一个问题,如下:

malloc.c:3074: SYSMALLOc: 断言 (old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (无符号长)((((__builtin_offsetof (结构 malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & 页面掩码) == 0) 失败。

请帮我修复它,在此先感谢!

【问题讨论】:

  • 看起来像堆误用。你应该提供一个暴露它的sn-p。
  • 你能用一个小例子重现它吗?大约有十行代码。
  • 我只是使用 malloc() 方法来获取一些内存。如果我评论此行,则不会发生此问题。
  • 行就是这样 char *seq=malloc(1000*sizeof(char));当然,还有更多这样的行。但我不知道它在哪里。
  • 尝试使用许多断言。不要将所有这些逻辑测试组合成一个语句,如果您想轻松定位问题。

标签: c memory malloc


【解决方案1】:

似乎为内存分配保留的管理已损坏。我的猜测是,在发生此错误之前,您在某处有类似缓冲区溢出的情况。

由于该错误是由较早的问题引起的(假设我是对的),这可能是一个难以解决的问题。也许像 valgrind 这样的工具可以帮助您检测对内存的错误写入。如果您有一个演示问题的小程序,我建议将该代码添加到您的问题中。

【讨论】:

  • 我的程序有点大,这里无法显示所有代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2018-05-31
相关资源
最近更新 更多