Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
执行此代码时,库 dmalloc 以某种方式确定存在越界内存访问。因为它分配了 1023 个元素并试图访问第 1024 个元素。(数组索引从 0 开始)。
#include "dmalloc.h" int main(){ char *ch = malloc(1023); ch[1023] = 0x00; return 0; }
它怎么会知道?
使用 dmalloc 库时,它实际上分配的比您请求的要多。它在返回给您的内存之前保留一个区域,在返回给您的内存之后保留一个区域。这些区域填充有特殊值,然后在释放内存时检查这些值。如果这些值不正确,那么您显然已经修改了内存超出范围。
最简单的方法是使用哨兵,它们只是由 dmalloc 用已知模式填充的内存块。然后它可以检查该模式是否已被破坏,并标记错误。