【发布时间】:2023-03-21 02:34:01
【问题描述】:
为了确保我实现的数据结构功能健全,我使用mcheck 编写了一个测试文件,以确保我在分配的内存范围内工作。但是,当尝试在字符串文字上使用mprobe()(并在开头调用mcheck(NULL))时,程序总是以MCHECK_HEAD 中止。
我用我能想到的最小程序尝试了这个:
#include <mcheck.h>
#include <stdio.h>
int main()
{
mcheck(NULL);
mprobe("test");
exit(0);
}
结果如下:
$ gcc test.c -lmcheck
$ ./a.out
memory clobbered before allocated block
Aborted (core dumped)
因此,mcheck 似乎在遇到字符串文字时都会失败,认为前面的内存已被修改。为什么?是不是因为字符串没有明确malloced?
【问题讨论】:
-
“分配的内存”是指
malloc家族函数分配的内存
标签: c gcc memory-management heap-memory