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

 

 

 

目录
相关文章
|
存储 编译器 C++
《C++避坑神器·十五》动态库只有dll文件,没有.lib文件时动态调用dll的中类和成员函数
《C++避坑神器·十五》动态库只有dll文件,没有.lib文件时动态调用dll的中类和成员函数
474 0
|
存储 数据可视化 NoSQL
Qt Creator的CDB调试器--使用技巧与解决调试很慢的心得,重点是Symbols Path设置
Qt Creator的CDB调试器--使用技巧与解决调试很慢的心得,重点是Symbols Path设置
2771 0
Qt Creator的CDB调试器--使用技巧与解决调试很慢的心得,重点是Symbols Path设置
|
安全 编译器 Linux
别忘了给gcc编译器工具链加上-fno-common选项
别忘了给gcc编译器工具链加上-fno-common选项
|
Linux C#
LINUX C# 加载本地库的范例代码
LINUX C# 加载本地库的范例代码
116 0
|
iOS开发 MacOS
XCode应该是从11.4开始支持Sandbox
XCode应该是从11.4开始支持Sandbox
147 0
|
Unix 物联网 Linux
开源项目推荐:POCO C++ Libraries大全,含MFC的编译及使用
开源项目推荐:POCO C++ Libraries大全,含MFC的编译及使用
720 0
开源项目推荐:POCO C++ Libraries大全,含MFC的编译及使用
|
API C# C++
C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
原文:C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件       这两天忙着把框架改为支持加载C++和Delphi的插件,来不及更新blog了。      原来的写的框架只支持c#插件,这个好做,直接用c#的反射功能便可。
1123 0