代码之家  ›  专栏  ›  技术社区  ›  Dummy00001

Purify在类/结构填充上的Uninit内存读取(UMR)

  •  3
  • Dummy00001  · 技术社区  · 14 年前

    Purify . 例如。

    struct something {
        int field1;
        char field2;
    };
    
    /* ... */
    
    struct something smth, smth2;
    smth.field1 = 1;
    smth.field2 = 'A';
    
    smth2 = smth;
    

    最后一行很可能会触发UMR警告,表示已访问3字节的初始化内存。这显然是一个误报:在结构的最后三个字节中没有用户数据,它只是一个填充。

    通常警告会很快填满日志文件,很难看到其他真正的问题。

    有人知道如何抑制假阳性吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   schot    14 年前

    我没有purify方面的经验,但可能显式初始化第一个结构会删除以下警告:

    struct something smth = {0};
    struct something smth2;
    

    我假设你的结构有块作用域(不是文件)。如果它们具有文件作用域,则零初始化是隐式的。