MISRA C:2012 Rule 22.6

Значение указателя на FILE не буду использоваться после того, как связанный поток был закрыт

Описание

Управляйте определением

Значение указателя на FILE не буду использоваться после того, как связанный поток был закрыт.

Объяснение

Стандарт утверждает что значение FILE* указатель неопределенен после того, как вы закроете поток, сопоставленный с ним.

Реализация Polyspace

Можно проверять на это правило с анализом Bug Finder только.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#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 используется, прежде чем поток вновь открыт.

Проверяйте информацию

Группа: ресурсы
Категория: обязательный
Категория AGC: обязательный
Введенный в R2015b