目前,我正在使用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可以识别这两个代码块的访问冲突吗?
发布于 2016-12-09 20:10:04
根据用户指南(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。
https://stackoverflow.com/questions/40077682
复制相似问题