The Delphi Container Library (DCLX) 几处BUG

简介: function TStrIntfHashMap.Remove(const Key: string): IInterface;var  Bucket: PStrIntfBucket;  I: Integer;{$IFDEF THREADSAFE}  CS: IInterface;{$EN...

 

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针对对象和接口的释放都貌似有些问题。

 

 

 

目录
相关文章
|
6月前
|
Ubuntu 编译器 Linux
Ubuntu下Qt编程,从QT的安装到编写notepad
Ubuntu下Qt编程,从QT的安装到编写notepad
|
图形学
Unity3D 5.x 启动过程中 License Error 解决办法
Unity3D 5.x 启动过程中 License Error 解决办法
277 0
|
IDE 开发工具
Visual Studio下程序开发: 编译QT程序Debug正常,Release出错
Visual Studio下程序开发: 编译QT程序Debug正常,Release出错
992 0
Visual Studio下程序开发: 编译QT程序Debug正常,Release出错
|
存储 数据可视化 NoSQL
Qt Creator的CDB调试器--使用技巧与解决调试很慢的心得,重点是Symbols Path设置
Qt Creator的CDB调试器--使用技巧与解决调试很慢的心得,重点是Symbols Path设置
2648 0
Qt Creator的CDB调试器--使用技巧与解决调试很慢的心得,重点是Symbols Path设置
|
Java
UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏
原文:UWP开发入门(十三)——用Diagnostic Tool检查内存泄漏   因为.NET的垃圾回收机制相当完善,通常情况下我们是不需要关心内存泄漏的。问题人一但傻起来,连自己都会害怕,几个页面跳啊跳的,内存蹭蹭的往上涨,拉都拉不住。
1435 0