可以净化找出栈变量上的访问冲突

Can purify find out access violation on stack variables?

本文关键字:变量 访问冲突      更新时间:2023-10-16

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

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

上面的代码中有无效的写入和读取,但下面的代码中没有。

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

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

根据用户指南(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