繁体   English   中英

Purify可以找出堆栈变量上的访问冲突吗?

[英]Can purify find out access violation on stack variables?

目前,我正在使用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可以识别两个代码块的访问冲突吗?

根据用户指南( 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也仅检测到堆数据违规。 我仅针对Linux和Solaris测试了IBM(7.0.1)的最新版本。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM