上一次在csdn發失敗了,再試試看
句柄泄漏最終造成系統的網絡完全癱瘓!
下面是 Delphi6 VCL 標准類庫 Sockets 單元中 TBaseSocket 類的一段代碼:
procedure TBaseSocket.Close;
begin
if FActive then
begin
{$IFDEF LINUX}
ErrorCheck(Libc.__close(FSocket));
{$ENDIF}
FSocket := INVALID_SOCKET;
FActive := False;
DoDestroyHandle;
end;
end;
難道 Borland 的開發人員忘了在 {$IFDEF MSWINDOWS} 時也需要關閉句柄?這個 BUG 的後果就是句柄泄漏最終造成系統的網絡完全癱瘓!
此 BUG 在 Delphi2005 已經修改了,不知道 Delphi7 和 Delphi8 中有沒有被修改!
下面是 Delphi2005 的代碼:
procedure TBaseSocket.Close;
begin
if FActive then
begin
{$IFDEF MSWINDOWS}
ErrorCheck(closesocket(FSocket));
{$ENDIF}
{$IFDEF LINUX}
ErrorCheck(Libc.__close(FSocket));
{$ENDIF}
FSocket := INVALID_SOCKET;
FActive := False;
DoDestroyHandle;
end;
end;
使用 Delphi6 時就要注意了,所有從 TBaseSocket 繼承的類在 free 以前都要先把 Handle 記錄下來在 free 以後手動 closesocket
VCL中的一個內存泄漏Bug摘要:VCL中的一個內存泄漏Bug在valedit.pas中,TValueListStrings類沒有實現虛擬的Destroy方法,它實現了虛擬的Clear方法, 但是它的父類TStringList的Destroy中並不通過調用Clear()來釋放資源,因此TValueListStrings中...查看完整版>>
VCL中的一個內存泄漏Bug
VCL 中的一個內存泄漏 Bug在valedit.pas中,TValueListStrings類沒有實現虛擬的Destroy方法,它實現了虛擬的Clear方法, 但是它的父類TStringList的Destroy中並不通過調用Clear()來釋放資源,因此TValueListStrings中爲成員ItemProps分配的內存就...查看完整版>>
VCL 中的一個內存泄漏 Bug
C++ Builder 5 和 6中VCL的一個內存泄漏 BUG版本:C++Builder 5 、6文件:{C++Builder Path}/include/vcl/utilcls.h行號:1039 (implemention of operator AnsiString() const)行號:1065 (implemention of operator WideString() const)行號:1081 (implement...查看完整版>>
C++ Builder 5 和 6中VCL的一個內存泄漏 BUG
使用TCPMP發現的一個BUG本人剛加入智能手機軍團不久,在使用TCPMP過程,發現了點問題,有時候會出現TCPMP崩潰的現象,開始我就刪了,再換個版本~~後來發現其實解決這個問題很簡單。 它崩潰的時候會提示:意外故障!請向此程序作者發送“cr...查看完整版>>
使用TCPMP發現的一個BUG
用next_permutation()生成r-組合數,兼發現VC7的一個bugC++ standard library提供了兩個生成排列的algorithms:next_permutation()與prev_permutation(),卻沒有提供生成組合數的標准函數。 由于排列與組合之間有著密切的聯系,我們很容易就可以從“排列”獲得“組合”...查看完整版>>
用next_permutation()生成r-組合數,兼發現VC7的一個bug