delphi xe5上的gnugettext内存泄漏



我正在使用gnugettext来翻译我的应用。刚刚安装了Eurekalog来检查任何内存泄漏,并确保应用程序清楚地运行。每次关闭应用程序时,我都会收到许多可能的内存泄漏,以下是一个:

|+Leak #3: Type=BSTR (Memory): $058A0A24 - SysReAllocStringLen; Count=1                                                                                                    |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|00000002|04     |00000000|00825A8F|myapp.exe|00425A8F|LcUnit                 |TGnuGettextInstance             |dgettext                                  |1564[7]  |
|00000002|04     |00000000|00823BBD|myapp.exe|00423BBD|LcUnit                 |                                |dgettext                                  |737[1]   |
|00000002|04     |00000000|008239FF|myapp.exe|004239FF|LcUnit                 |                                |ResourceStringGettext                     |658[10]  |
|00000002|04     |00000000|00827E65|myapp.exe|00427E65|LcUnit                 |TGnuGettextInstance             |LoadResString                             |2484[45] |
|00000002|04     |00000000|00824407|myapp.exe|00424407|LcUnit                 |                                |LoadResStringW                            |1054[1]  |
|00000002|03     |00000000|00A01931|myapp.exe|00601931|cxClasses              |                                |cxGetResourceString                       |         |
|00000002|03     |00000000|00B45E17|myapp.exe|00745E17|cxGridCustomView       |TcxCustomGridCellViewInfo       |CalculateParams                           |         |
|00000002|03     |00000000|00B4673D|myapp.exe|0074673D|cxGridCustomView       |TcxCustomGridCellViewInfo       |Calculate                                 |         |
|00000002|03     |00000000|00BD1471|myapp.exe|007D1471|cxGridCustomTableView  |TcxCustomGridPartViewInfo       |CalculateInvisible                        |         |
|00000002|03     |00000000|00B47C30|myapp.exe|00747C30|cxGridCustomView       |TcxCustomGridViewInfo           |MainCalculate                             |         |
|00000002|03     |00000000|00B2C438|myapp.exe|0072C438|cxGridDetailsSite      |TcxCustomGridDetailsSiteViewInfo|Calculate                                 |         |
|00000002|03     |00000000|00B313D6|myapp.exe|007313D6|cxGrid                 |TcxGridLayoutChange             |Execute                                   |         |
|00000002|03     |00000000|00B33EA9|myapp.exe|00733EA9|cxGrid                 |                                |DoFinalChanges                            |         |
|00000002|03     |00000000|00B33F3A|myapp.exe|00733F3A|cxGrid                 |TcxCustomGrid                   |DoUpdate                                  |         |
|00000002|03     |00000000|00B34286|myapp.exe|00734286|cxGrid                 |TcxCustomGrid                   |EndUpdate                                 |         |
|00000002|03     |00000000|00B33E9C|myapp.exe|00733E9C|cxGrid                 |                                |DoFinalChanges                            |         |
|00000002|03     |00000000|00B33F3A|myapp.exe|00733F3A|cxGrid                 |TcxCustomGrid                   |DoUpdate                                  |         |
|00000002|03     |00000000|00B34286|myapp.exe|00734286|cxGrid                 |TcxCustomGrid                   |EndUpdate                                 |         |
|00000002|03     |00000000|00B49C55|myapp.exe|00749C55|cxGridCustomView       |TcxCustomGridView               |GridEndUpdate                             |         |
|00000002|03     |00000000|00C45821|myapp.exe|00845821|cxGridDBDataDefinitions|TcxGridDBDataController         |EndFullUpdate                             |         |
|00000002|03     |00000000|0079FDDD|myapp.exe|0039FDDD|Data.DB                |TDataLink                       |DataEvent                                 |         |
|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|

指向以下功能:

function TGnuGettextInstance.dgettext(const szDomain: DomainString;
  const szMsgId: MsgIdString): TranslatedUnicodeString;
begin
  if not Enabled then begin
    {$ifdef DXGETTEXTDEBUG}
    DebugWriteln ('Translation has been disabled. Text is not being translated: '+szMsgid);
    {$endif}
    Result:=szMsgId;
  end else begin
    Result:=UTF8Decode(EnsureLineBreakInTranslatedString(getdomain(szDomain,DefaultDomainDirectory,CurLang).gettext(StripCRRawMsgId(utf8encode(szMsgId)))));
    {$ifdef DXGETTEXTDEBUG}
    if (szMsgId<>'') and (Result='') then
      DebugWriteln (Format('Error: Translation of %s was an empty string. This may never occur.',[szMsgId]));
    {$endif}
  end;
end;

特别是在以下行:

Result:=UTF8Decode(EnsureLineBreakInTranslatedString(getdomain(szDomain,DefaultDomainDirectory,CurLang).gettext(StripCRRawMsgId(utf8encode(szMsgId)))));

有什么想法吗?帮助赞赏。

出现这样的许多内存泄漏是次要的;您找不到试图直接从此列表中追踪它们的答案。查找您添加对象或复制字符串的TStringList条目。还可以将您分配给.DATA属性的位置。您似乎正在向CXGrid提供一些无法正确管理的东西。如果所有这些都来自两个参考文献,那不会让我感到惊讶!我已经看到只添加一个obj。

最新更新