最近,在处理C ++项目时,我忘了重新初始化一个计数器变量,该变量用于在运行时访问动态分配的数组。
正如预期的那样,程序在执行时崩溃,错误如下:
“glibc检测到malloc():内存损坏”
现在我知道new / malloc会从堆中分配一些额外的内存字节用于簿记。然而,令我感兴趣的是,编译器检测到我写了一些我不应该写的数据。任何想法编译器如何做到这一点?
答案 0 :(得分:1)
这是C库向你抱怨;不是编译器。具体来说,它是GNU C库中的malloc实现。
第3738行是发出此类错误的地方。
https://code.woboq.org/userspace/glibc/malloc/malloc.c.html
您必须检查库源代码以查看发生的情况。但是,不同的库表现不同。他们以不同的方式分配内存,他们可能会也可能不会进行完整性检查。