[英]MISRA C 2012 violation of rule 9.1 even with an initialized variable
我試圖擺脫代碼中的違反規則9.1。
規則9.1:具有自動存儲持續時間的對象的值在設置之前不得讀取
樣例代碼:
#include <stdint.h>
#include <stdbool.h>
#define VAL 0xABCDEFABU
int32_t main(void);
static int32_t do_test(bool k);
static void func(uint64_t *var3, const uint64_t *var5);
int32_t
main (void)
{
bool b = false;
int32_t y = do_test(b);
return y;
}
static int32_t
do_test(bool k)
{
uint64_t i = 0, var4[10];
int32_t result = 0;
for(i = 0U; i < 10U; i++) {
var4[i] = VAL + i;
}
if(k == false) {
uint64_t var2[10];
func(var2, var4);
if(var2[9] == var4[9]) {
result = 1;
}
}
return result;
}
static void
func(uint64_t *var3, const uint64_t *var5)
{
int32_t i;
for(i = 0; i < 10; i++) {
var3[i] = var5[i];
}
}
我通過調用另一個函數“ func”(在其中將var4復制到var2中)在函數do_test中初始化var2。
它編譯正常,我得到y值= 1。
是由於func中的參數作為指針而引起的違反,函數do_test並未通過func中的指針了解值分配
反正有解決此問題的方法嗎?
這是許多靜態分析儀中常見的工具錯誤。 您的靜態分析器顯然無法理解函數func
初始化了var2
所有項目,因此您在var2[9] == var4[9]
行上得到了假肯定。
在許多靜態分析器上,例如int my_array[10]; initialize(my_array);
代碼int my_array[10]; initialize(my_array);
int my_array[10]; initialize(my_array);
提供令人沮喪的誤報。 “您嘗試在數組初始化之前對其進行初始化!!!” 哦,真的。。。謝謝您,最有用的靜態分析器。
您的代碼很好。 向您的工具供應商提交錯誤報告。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.