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