メインコンテンツ

MISRA C:2012 Rule 9.1

The value of an object with automatic storage duration shall not be read before it has been set

説明

レポート内のメッセージ:

ルール定義

The value of an object with automatic storage duration shall not be read before it has been set 1 .

根拠

自動ストレージ期間をもつ変数には囲んでいるコード ブロックの先頭でメモリが割り当てられ、最後で割り当てが解除されます。グローバルではない変数には static または extern と宣言されたものを除いて、すべてこのストレージ期間があります。

自動ストレージ期間をもつ変数は自動的に初期化されず、不確定の値をもちます。したがって、書き込み操作を介して値を設定する前にそのような変数の読み取りを行ってはいけません。

Polyspace 実装

Polyspace ® は、コードに以下の問題が含まれている場合にこの違反を報告します。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

command が 2 でない場合、変数 val には値が割り当てられません。この場合、関数 get_sensor_value の戻り値は未定です。

int get_sensor_value(void)
{
    extern int getsensor(void);
    int command;
    int val;

    command = getsensor();
    if (command == 2) 
      {
        val = getsensor();
      }

    return val; //Noncompliant              
   
}

prevNULL でない場合、ポインター pi にはアドレスが割り当てられません。しかし、prevNULL かどうかにかかわりなく、pi はすべての実行パスでデリファレンスされます。

#include <stdlib.h>

int* assign_pointer(int* prev)
{
    int j = 42;
    int* pi;

    if (prev == NULL) 
      {
        pi = (int*)malloc(sizeof(int));
        if (pi == NULL) return NULL;
      }

    *pi = j; //Noncompliant                    

    return pi;
}

チェック情報

グループ: 初期化
カテゴリ: Mandatory
AGC カテゴリ: Mandatory

バージョン履歴

R2014b で導入

すべて展開する


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.