EN JP CN

CS.RLK

CS.RLK

'IDisposable' インターフェイスを実装するタイプのオブジェクトへの参照は失われますが、'Dispose' メソッドは呼び出されません。

脆弱性とリスク

管理クラスは IDisposable インターフェイスを使用して、ガーベッジコレクターがオブジェクトを終了する前に、顧客が負荷のかかる可能性があるリソースを解放できるようにします。

例 1

1  using System;
2  using System.IO;
3  
4  namespace LeakExample
5  {
6      class Test
7      {
8          public String Run(String name)
9          {
10             StreamReader reader = new StreamReader(name);
11             String result = reader.ReadToEnd();
12             reader.Close();
13             return result;
14         }
15     }
16 }

この例で、Klocwork は指摘レポートを生成します。StreamReader クラスによって IDisposable インターフェイスが実装され、Close メソッドの実装によって Dispose メソッドが呼び出されます。'StreamReader' タイプのオブジェクトが割り当てられ、その参照は 'reader' 変数に割り当てられます。'ReadToEnd' の呼び出しによって例外がスローされる場合、コントロールはメソッド 'Run' の外に転送され、変数は範囲外になり、それによって参照されるオブジェクトは失われますが、関連するリソースは破棄されません。