首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >purify可以找出堆栈变量上的访问冲突吗?

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

Stack Overflow用户
提问于 2016-10-17 10:31:39
回答 1查看 90关注 0票数 0

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

代码语言:javascript
复制
char* a = static_cast<char*>(malloc(sizeof(char) * 5));
a[7] = 'c';
printf("%c\n", a[7]);
free(a);

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

代码语言:javascript
复制
char a[5] = {0};
a[7] = 'c';
printf("%c\n", a[7]);  

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

EN

回答 1

Stack Overflow用户

发布于 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40077682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档