c - malloc库如何判断发生了越界访问?

标签 c dmalloc

执行此代码时,库 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/

相关文章:

C:sizeof()相关疑惑?

c - 如何在 c 中分配大容量(GB 数量级)的内存?

c++ - 在最近的 g++ 中使用 dmalloc

c - 'ld' 无法链接符号,尽管它们在库中

C 将文本文件的编号存储在数组中

c - 使用 C,为什么 char * 类型在一个地方大小为 2,而在另一个地方大小为 4?

c - c 中的 for 语句中的声明