2017-06-22 101 views
0

我不知道爲什麼靜態代碼分析工具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 };
它爲什麼會升起國旗&我該如何解決這個問題?

+3

從來沒有'memcpy''揮發性'合格的對象! 'memcpy'不保證任何訪問順序。問題是**爲什麼**你會使用'volatile'。它似乎不是一個硬件寄存器,所以它很可能是錯誤的! ('volatile'不適用於線程間通信。) – Olaf

回答

1

它會拋出警告,因爲您將易失性指針傳遞給非易失性參數。如果你真的想讓警告消失,只需將你的參數投到void *。但是,也許你應該重新訪問你的變量是否是不穩定的,或者以不同的方式初始化它。

相關問題