可以净化查找堆栈变量的访问冲突吗?

时间:2016-10-17 02:31:39

标签: c++ memory-leaks valgrind access-violation purify

目前我正在使用Valgrind检查内存泄漏并将Purify作为替代方案。 Valgrind可以找到在堆中创建但不在堆栈中创建的数组的访问冲突。

char* a = static_cast<char*>(malloc(sizeof(char) * 5));
a[7] = 'c';
printf("%c\n", a[7]);
free(a);

Valgrind在上面的代码中写入和读取无效的点,但不是以下代码。

char a[5] = {0};
a[7] = 'c';
printf("%c\n", a[7]);  

Purify可以识别两个代码块的访问冲突吗?

1 个答案:

答案 0 :(得分:0)

根据用户指南(ftp://ftp.software.ibm.com/software/rational/docs/v2003/purify/html/ht_m_sbr.htm)和(ftp://ftp.software.ibm.com/software/rational/docs/v2003/purify/html/ht_m_sbw.htm),Purify可以检测堆栈边界读写。

但是,尝试实际示例时,Purify也只检测到对堆数据的违规。我只测试了IBM(7.0.1)的最新版本,包括Linux和Solaris。

您可能需要查看gcc 4.8及更高版本的-fsanitize = address。

相关问题