《实际工作中调试问题记录》

1.malloc了一段内存,free的时候提示double free or corruption (out)后崩溃

  原因是应用层malloc了一个size的堆,然后用这个buffer去ioctl驱动层复制数据。但是驱动层复制的数据大于size。导致应用层free的时候崩溃了。

问题分析:

  这是典型“写越界导致堆元数据被破坏”的崩溃,不是 free 本身有问题。

  • buffer = malloc(FACTORY_EEPROM_SIZE) 只分配了 N 字节
  • 但 ioctl(..., GT24P_IOCTL_READ_ALL, buffer) 实际往里写了 >N 字节
  • 这会把 buffer 后面的堆管理信息(chunk header/next chunk)覆盖掉
  • 等到 free(buffer) 时,glibc 在做一致性检查,发现堆结构被破坏,于是报 double free or corruption 并abort

所以崩溃点在 free,根因在 越界写。

 

2.

 

posted @ 2026-01-15 16:24  一个不知道干嘛的小萌新  阅读(0)  评论(0)    收藏  举报