编译器如何检测内存损坏

时间:2018-03-31 19:38:22

标签: c++ memory-management compiler-errors

最近,在处理C ++项目时,我忘了重新初始化一个计数器变量,该变量用于在运行时访问动态分配的数组。

正如预期的那样,程序在执行时崩溃,错误如下:

“glibc检测到malloc():内存损坏”

现在我知道new / malloc会从堆中分配一些额外的内存字节用于簿记。然而,令我感兴趣的是,编译器检测到我写了一些我不应该写的数据。任何想法编译器如何做到这一点?

1 个答案:

答案 0 :(得分:1)

这是C库向你抱怨;不是编译器。具体来说,它是GNU C库中的malloc实现。

第3738行是发出此类错误的地方。

https://code.woboq.org/userspace/glibc/malloc/malloc.c.html

您必须检查库源代码以查看发生的情况。但是,不同的库表现不同。他们以不同的方式分配内存,他们可能会也可能不会进行完整性检查。