执行此代码时,库 dmalloc 以某种方式确定存在越界内存访问。因为它分配了 1023 个元素并尝试访问第 1024 个元素。 (数组索引从 0 开始)。
#include "dmalloc.h"
int main(){
char *ch = malloc(1023);
ch[1023] = 0x00;
return 0;
}
它怎么知道?
最佳答案
当使用 dmalloc 库时,它实际上分配的比您请求的多。它会在返回给您的内存之前保留一个区域,并在之后保留一个区域。这些区域填充有特殊值,然后在释放内存时检查这些值。如果这些值不正确,那么显然您修改的内存超出了范围。
关于c - malloc库如何判断发生了越界访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12300056/