【问题标题】:Segfault on free()free() 上的段错误
【发布时间】:2012-11-13 11:36:37
【问题描述】:

我遇到了一个简单的问题:我的程序在释放一些使用 calloc() 分配的内存时出现了段错误。回溯中的最后一个函数是 _IO_str_pbackfail。目前我使用的是 icc 版本 12.1.6。根据堆栈溢出的其他问题,这通常是由堆损坏引起的。通过查看 calloc 源,该函数似乎在分配空间的前 16 个字节中写入了一些数据。我试图在这些字节上添加一个观察点,但调试器没有检测到任何恶意写入。有关如何追踪此问题的任何想法?

【问题讨论】:

  • 使用 GDB 和回溯 (bt)。但是,如果您需要更多帮助,则必须发布您的代码。
  • 请发布出现段错误的代码的最小版本。
  • 闻起来像一个别名/陈旧的指针。
  • 您要么在进行乘法释放,要么在某些时候覆盖了一些簿记数据。无论哪种方式,你都有一个严重的问题。

标签: c segmentation-fault heap-memory free corruption


【解决方案1】:

您可以尝试使用MALLOC_CHECK_=2valgrind 运行。

【讨论】:

  • Valgrind 发现了这个问题。缓冲区溢出覆盖了 16 个魔术字节。不过,我仍然不明白为什么手表没有捕捉到这一点
猜你喜欢
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
相关资源
最近更新 更多