Правило 22.6 MISRA C:2012

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

Описание

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

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

Объяснение

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

Реализация Polyspace

Можно проверять на это правило с анализом Средства поиска Ошибки только.

Обменивайтесь сообщениями в отчете

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

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

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

Примеры

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

#include <stdio.h>

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

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

В этом примере поток сопоставил с указателем FILE*, fp закрывается с функцией fclose. Правило является нарушенным указателем FILE*, fp используется, прежде чем поток вновь открыт.

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

Группа: ресурсы
Категория: обязательный
Категория AGC: обязательный
Язык: C90, C99

Введенный в R2015b