我以前没有使用过 valgrind,但我认为它应该检测到一些内存错误。
我的代码:
#include <stdio.h>
unsigned int a[2];
int main()
{
a[-1] = 21;
printf("%d,", a[-1]);
return 1;
}
如您所见,我正在访问a[-1]
我不应该访问的内容。
我如何使用 valgrind?
我正在编译gcc -g -O0 codeFile.c
并执行:valgrind -s ./a.out
结果是:
==239== Memcheck,内存错误检测器
==239== 版权所有 (C) 2002-2017 和 GNU GPL,由 Julian Seward 等人提供。
==239== 使用 Valgrind-3.16.0.GIT 和 LibVEX;使用 -h 重新运行以获取版权信息
==239== 命令:./a.out
==239== 21,==239==
==239== 堆摘要:
==239== 在退出时使用:0 个块中的 0 个字节
==239== 总堆使用量:1 次分配,1 次释放,分配 1,024 字节
==239==
==239== 所有堆块都被释放——不可能有泄漏
==239==
==239== 错误摘要:0 个上下文中的 0 个错误(抑制:0 个来自 0)
valgrind 不应该发现这些错误,还是我用错了?
[ _ -10] 而不是 [1]。相同的行为。
int main()
{
unsigned int a[2];
a[-10] = 21;
printf("%d,", a[-10]);
return 1;
}
如果我使用 [-100] 它实际上会引发错误。这是怎么回事?
编辑 2
此外,为什么这没有错误
while (i <= 2)
{
j = a[i];
i++;
}
但这确实
while (i <= 2)
{
printf("%d,", a[i]);
i++;
}