The Delphi Container Library (DCLX) 几处BUG

 

function TStrIntfHashMap.Remove(const Key: string): IInterface;
var
  Bucket: PStrIntfBucket;
  I: Integer;
{$IFDEF THREADSAFE}
  CS: IInterface;
{$ENDIF}
begin
{$IFDEF THREADSAFE}
  CS := EnterCriticalSection;
{$ENDIF}
  Result := nil;
  if Key = '' then
    Exit;
  Bucket := @(FBuckets[FHashFunction(HashString(Key))]);
  for I := 0 to Bucket.Count - 1 do
    if Bucket.Entries[I].Key = Key then
    begin

     //在Remove的时候仅仅只是返回了值,没有把Bucket.Entries[i]中的Value值进行置空。

     Result := Bucket.Entries[I].Value;

     //add by mofen
     Bucket.Entries[I].Value := nil;

      System.Move(Bucket.Entries[I + 1], Bucket.Entries[I],
       (Bucket.Count - I) * SizeOf(TStrStrEntry));
      Dec(Bucket.Count);
      Exit;
    end;
end;

 

我看了所有的Remove针对对象和接口的释放都貌似有些问题。

 

 

 

posted @ 2011-10-08 08:26  D10.天地弦  阅读(370)  评论(0)    收藏  举报