首页 > 解决方案 > Valgrind 可以检测到堆栈变量上的无效读取吗

问题描述

我写了一个小代码来验证 Valgrind 是否能够检测到一些无效读取,看起来它没有检测到它。可以这样做吗?

int a[2];
printf("test %d", a[100]);

如果将数组交换为动态分配,那么 Valgrind 工作正常。(大小为 4 的无效读取)

标签: valgrind

解决方案


valgrind --tool=memcheck(默认工具)不会检测到此类问题。

有一个实验性工具 valgrind --tool=exp-sgcheck 旨在检测此类错误,但它从未正常工作,并且该工具可能会从 valgrind 发行版中删除。

据我所知,gcc/clang sanitizer 是用于检测此类错误的技术。


推荐阅读