【问题标题】:Can purify find out access violation on stack variables?purify 可以找出堆栈变量的访问冲突吗?
【发布时间】:2016-10-17 02:31:39
【问题描述】:

目前我正在使用 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 能否识别出这两个代码块的访问冲突?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-08
      • 2020-11-15
      • 2012-01-12
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 2013-08-18
      相关资源
      最近更新 更多