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”将超出范围,其引用的对象将丢失,但不会处置相关资源。