CS.RLK

对实施“IDisposable”接口的类型的对象引用已丢失,但是“Dispose”方法未调用。

漏洞与风险

托管类使用 IDisposable 接口,让客户能够在垃圾回收器终结对象前释放可能较昂贵的资源。

示例

复制
  using System;
  using System.IO;
  
  namespace LeakExample
  {
      class Test
      {
          public String Run(String name)
          {
             StreamReader reader = new StreamReader(name);
             String result = reader.ReadToEnd();
             reader.Close();
             return result;
         }
     }
 }

Klocwork 为该示例生成了一个问题报告。StreamReader 类实施 IDisposable 接口,Close 方法的实现则调用 Dispose 方法。“StreamReader”类型的对象已分配,并且其引用已赋值给“reader”变量。如果对“ReadToEnd”的调用引发异常,将从方法“Run”传输控制,变量“reader”将超出范围,其引用的对象将丢失,但不会处置相关资源。