0

执行此代码时,库 dmalloc 以某种方式确定存在越界内存访问。因为它分配了 1023 个元素并试图访问第 1024 个元素。(数组索引从 0 开始)。

#include "dmalloc.h"
int main(){

    char *ch = malloc(1023);
    ch[1023] = 0x00;
    return 0;
}

它怎么会知道?

4

2 回答 2

1

使用 dmalloc 库时,它实际上分配的比您请求的要多。它在返回给您的内存之前保留一个区域,在返回给您的内存之后保留一个区域。这些区域填充有特殊值,然后在释放内存时检查这些值。如果这些值不正确,那么您显然已经修改了内存超出范围。

于 2012-09-06T12:29:53.387 回答
0

最简单的方法是使用哨兵,它们只是由 dmalloc 用已知模式填充的内存块。然后它可以检查该模式是否已被破坏,并标记错误。

于 2012-09-06T12:30:08.670 回答