﻿# V3226\. Potential resource leak\. The disposing method will not be called if an exception occurs in the 'try' block\. Consider calling it in the 'finally' block\.

Анализатор обнаружил освобождение неуправляемого ресурса, которое может не произойти из\-за выброшенного исключения\.

Пример:

```cpp
public void ProcessStreamReader(....)
{
  StreamReader sr = null;

  try
  {
    sr = new StreamReader(Console.OpenStandardInput(), Encoding.UTF8);

    string readString = sr.ReadLine();

    IO.WriteLine(readString);

    sr.Close();
  }
  catch (IOException exceptIO)
  {
    Console.WriteLine(exceptIO);
  }
}
```

В данном случае разработчик хотел вызвать метод `Close` для освобождения ресурсов, которые использует объект\. Если в блоке `try` будет выброшено исключение, то метод не отработает, и ресурс не будет очищен\.

Исправленный код может выглядеть следующим образом:

```cpp
public void ProcessStreamReader(....)
{
  StreamReader sr = null;

  try
  {
    sr = new StreamReader(Console.OpenStandardInput(), Encoding.UTF8);

    string readString = sr.ReadLine();

    IO.WriteLine(readString);

    sr.Close();
  }
  catch (IOException exceptIO)
  {
    Console.WriteLine(exceptIO);
  }
  finally
  {
    if (sr != null)
    {
      sr.Close()
    }
  }
}
```

В исправленном варианте метод `Close` вызывается в блоке `finally`, поэтому метод будет вызван даже если в блоке `try` будет выброшено исключение\.