# 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.

The analyzer detected an unhandled resource release that may not occur due to an exception.

Look at the example:

    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);
      }
    }

The developer intended to call the `Close` method to release the resources used by the object. If the exception is thrown in the `try` block, the method will not execute, leaving the resource uncleared.

The fixed code may look as follows:

    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()
        }
      }
    }

In the fixed version, the `Close` method is called in the `finally` block, ensuring it will be called even if the `try` block throws an exception.

This diagnostic is classified as:

CWE-404