【发布时间】:2019-02-04 05:11:22
【问题描述】:
Valgring 不检测内存错误。
我在 ubuntu 下使用 valgrind 3.11、gcc 5.4.0 和 在我的程序中有一个不正确的代码,就像在示例中一样。
我使用 valgrind 分析了这个程序。但是 valgrind 不会报告任何错误。
#include <string.h>
int main(){
int a[3];
memcpy(a,"aaabbbcccdddeeefffggghhh", 24);
return 0;
}
valgrind 有什么问题?
【问题讨论】:
-
也许你有 8 个字节
ints -
在这个示例程序中增加了第三个参数 valgrind 报告了关于堆栈崩溃的信息。但在我的大应用程序中它没有帮助。我有
memcpy(a,"aaaaaaabbbbbbbbbbbbbccccccccccccccddddddeeeeeffffffggggggvvvvvbbbbbbbsdddddd", 40);valgrind 仍然无法工作 -
上次我检查时,
valgrind没有检测到大多数堆栈问题。如果您使用的是最近的 gcc/clang,您可以将-fsanitize=address添加到您的标志中。 -
没有
-fsanitize=addressvalgrind 可能不会检测到任何东西,因为所有写入都可能是有效的。而且这段代码可以优化成no-op。 -
如果我们假设,正如 john 所建议的,sizeof(int) 确实是 8,那么就不会报告内存错误。
标签: c++ ubuntu-16.04 valgrind