exponenta event banner

Утечка ресурсов

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

Описание

Этот дефект возникает при открытии потока файлов с помощью FILE указатель, но не закрывайте его раньше:

  • Конец области действия указателя.

  • Назначение указателя другому потоку.

Риск

Если явно не освободить дескрипторы файлов как можно скорее, может произойти сбой из-за исчерпания ресурсов.

Зафиксировать

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

Примеры

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

#include <stdio.h>

void func1( void ) {
    FILE *fp1;
    fp1 = fopen ( "data1.txt", "w" );
    fprintf ( fp1, "*" );

    fp1 = fopen ( "data2.txt", "w" );
    fprintf ( fp1, "!" );
    fclose ( fp1 );
}

В этом примере указатель на файл fp1 указывает на файл data1.txt. Прежде fp1 явно отмежеван от потока файлов data1.txt, он используется для доступа к другому файлу data2.txt.

Исправление - деблокирование FILE Указатель

Одной из возможных корректировок является явная диссоциация fp1 из потока файлов data1.txt.

#include <stdio.h>

void func1( void ) {
    FILE *fp1;
    fp1 = fopen ( "data1.txt", "w" );
    fprintf ( fp1, "*" );
    fclose(fp1);

    fp1 = fopen ( "data2.txt", "w" );                  
    fprintf ( fp1, "!" );
    fclose ( fp1 );
}

Информация о результатах

Группа: Управление ресурсами
Язык: C | C++
По умолчанию: Вкл для рукописного кода, выкл для сгенерированного кода
Синтаксис командной строки: RESOURCE_LEAK
Воздействие: Высокое
ИДЕНТИФИКАТОР CWE: 772
Представлен в R2015b