メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2012 Rule 22.6

The value of a pointer to a FILE shall not be used after the associated stream has been closed

説明

ルール定義

The value of a pointer to a FILE shall not be used after the associated stream has been closed 1 .

根拠

C 標準では、FILE* ポインターの値は、それに関連付けられたストリームが閉じられた後に不確定となります。ファイル ストリームを閉じた後の FILE* ポインターの使用は、未定義の動作です。

Polyspace 実装

ストリームを閉じた後に FILE を指すポインターにアクセスする場合、Polyspace® は違反を報告します。閉じられたファイル ストリームに複数回アクセスする場合、Polyspace は最初の使用に対して違反を報告します。

トラブルシューティング

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

すべて展開する

#include <stdio.h>

void func(void) {
    FILE *fp;
    void *ptr;

    fp = fopen("tmp","w");
    if(fp != NULL) {
        fclose(fp);
        fprintf(fp,"text"); // Non-compliant
    }
}

この例では、FILE* ポインター fp に関連付けられているストリームは、関数 fclose によって閉じられます。FILE* ポインター fp はストリームが再開される前に使用されており、ルールに違反しています。

チェック情報

グループ: Resources
カテゴリ: Mandatory
AGC カテゴリ: Mandatory

バージョン履歴

R2015b で導入


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.