【问题标题】:Why does coverity flag a warning for this?为什么覆盖率会为此标记警告?
【发布时间】:2017-06-22 14:08:51
【问题描述】:

我不确定为什么静态代码分析工具 Coverity 标记:

CID 40172 (#1 of 1): Parse warning (PW.INCOMPATIBLE_PARAM)
1. incompatible_param: argument of type "volatile mpls_RuntimeInfo_t *" is incompatible with parameter of type "void *"

对于这一行:

memset(&SW_RuntimeInfo[idx],0,sizeof(mpls_RuntimeInfo_t));

SW_RuntimeInfo 在全局范围内被声明为volatile static mpls_RuntimeInfo_t SW_RuntimeInfo[LABEL_T_CNT] = { 0 };
为什么它会引发标志以及如何解决这个问题?

【问题讨论】:

  • 永远不要memcpy volatile 合格的对象! memcpy 不保证任何访问顺序。问题是为什么你使用volatile。好像不是硬件寄存器,所以很可能是错的! (volatile不适合线程间通信。)

标签: c coverity


【解决方案1】:

它发出警告是因为您将 volatile 指针传递给非 volatile 参数。如果您真的只想让警告消失,只需将您的论点提交给void *。但也许您应该重新审视您的变量是否应该是 volatile,或者以不同的方式对其进行初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 2017-08-29
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多