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

Поток файла, не закрытый перед концами осциллографа указателя 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
Влияние: высоко
ID CWE: 772

Введенный в R2015b