Это полностью зависит от вашей реализации malloc, но обычно это означает, что в какой-то момент перед этим malloc что-то записало больше данных в буферизованный буфер, чем его размер.
Многие реализации malloc хранят некоторые свои данные встроенными в свою память, другими словами:
+--------------------------------+
|14 bytes -> Padding |
+--------------------------------+
|2 bytes -> Internal malloc info |
+--------------------------------+
|6 bytes -> Your data |
+--------------------------------+
|8 bytes -> Padding |
+--------------------------------+
|2 bytes -> Internal malloc info |
+--------------------------------+
Так что, если какой-то ваш код или библиотека записали 16 байтов в этот 6-байтовый буфер, он перезапишет заполнение и 2 байта внутренней информации malloc. В следующий раз, когда вы вызовете malloc, он попытается просмотреть свои данные, чтобы найти место, попасть в перезаписанное пространство, и это будет бессмысленным, поскольку вы перезаписали его, повредив кучу.
В зависимости от реализации такая ошибка также может быть вызвана двойным освобождением.