Resource leak

Поток файлов не закрыт перед 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++
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: RESOURCE_LEAK
Влияние: Высокий
ИДЕНТИФИКАТОР CWE: 772
Введенный в R2015b