QQ1群 :7155339(满)
QQ2群 :35446718(满)
QQ3群 :19696175

编程书籍下载
本土游戏联盟


火人工作室
    最新帖子    短信服务   
火人游戏论坛≡Asphyre专区≡Asphyre技术交流火老 请进
    
 
火老 请进
发起人:新人请教  回复数:8  浏览数:777  最后更新:2010-7-28 13:19:38 by 新人请教

选择查看 发表新帖 搜索更多相关主题  帖子排序:
2010-7-26 22:03:16
新人请教





新成员

角  色:注册用户
发 帖 数:9
经 验 值:12
注册时间:2010-7-17
火老 请进
此函数哪里存在内存泄露??

function GetValidStr3(str: string; var Dest: string; const Divider: array of Char): string;
const
  BUF_SIZE = 20480;
var
  Buf: array [0 .. BUF_SIZE] of Char;
  BufCount, Count, srclen, j, ArrCount: LongInt;
  ch: Char;
label CATCH_DIV;
begin
  ch := #0;
  try
    srclen := length(str);
    BufCount := 0;
    Count := 1;

    if srclen >= BUF_SIZE - 1 then
    begin
      Result := '';
      Dest := '';
      exit;
    end;

    if str = '' then
    begin
      Dest := '';
      Result := str;
      exit;
    end;
    ArrCount := SizeOf(Divider) div SizeOf(Char);

    while True do
    begin
      if Count <= srclen then
      begin
        ch := str[Count];
        for j := 0 to ArrCount - 1 do
          if ch = Divider[j] then
            goto CATCH_DIV;
      end;
      if (Count > srclen) then
      begin
      CATCH_DIV :
        if (BufCount > 0) then
        begin
          if BufCount < BUF_SIZE - 1 then
          begin
            Buf[BufCount] := #0;
            Dest := string(Buf);
            Result := Copy(str, Count + 1, srclen - Count);
          end;
          break;
        end
        else
        begin
          if (Count > srclen) then
          begin
            Dest := '';
            Result := Copy(str, Count + 2, srclen - 1);
            break;
          end;
        end;
      end
      else
      begin
        if BufCount < BUF_SIZE - 1 then
        begin
          Buf[BufCount] := ch;
          Inc(BufCount);
        end;
      end;
      Inc(Count);
    end;
  except
    Dest := '';
    Result := '';
  end;
end;


Divider传入多个参数时,程序退出 ExceptionLog 会报告内存泄露
2010-7-26 22:09:29
新人请教





新成员

角  色:注册用户
发 帖 数:9
经 验 值:12
注册时间:2010-7-17
Divider

以后代码 论坛居然给改成斜体了。。。


2010-7-27 1:24:37
火人





高级会员

角  色:管理员
发 帖 数:539
经 验 值:1174
注册时间:2007-5-29
我在D2010下测试没有问题
如果都开源,就没有微软;如果不开源,就没有我
2010-7-27 19:14:05
新人请教





新成员

角  色:注册用户
发 帖 数:9
经 验 值:12
注册时间:2010-7-17
谢谢火人的回答

我新开了DEMO测试这个函数 也没问题

但就是在应用程序里面会出问题

总共就是报告4个内存泄露  全都是指向这里 

Dest := string(Buf);

如果别处的问题 不应该指向这里吧??
2010-7-27 19:23:14
新人请教





新成员

角  色:注册用户
发 帖 数:9
经 验 值:12
注册时间:2010-7-17
2010-7-27 19:36:42
新人请教





新成员

角  色:注册用户
发 帖 数:9
经 验 值:12
注册时间:2010-7-17
郁闷死了  除了程序退出时的错误报告

关闭后打开错误报告里面居然是空的。。。

为何??
2010-7-27 20:45:41
killer120





热心会员

角  色:注册用户
发 帖 数:93
经 验 值:105
注册时间:2009-1-17
没发现其他问题 可能是Buf为空导致的吧 也许可编译器有关
我也是菜鸟 刚学编程 忘大家相互帮忙:P
2010-7-28 2:40:08
火人





高级会员

角  色:管理员
发 帖 数:539
经 验 值:1174
注册时间:2007-5-29
新人请教:
谢谢火人的回答

我新开了DEMO测试这个函数 也没问题

但就是在应用程序里面会出问题

总共就是报告4个内存泄露  全都是指向这里 

Dest := string(Buf);

如果别处的问题 不应该指向这里吧??

内存泄漏的跟踪不是很完善,一处引起的内存泄漏是有可能指向另一处的
如果都开源,就没有微软;如果不开源,就没有我
2010-7-28 13:19:38
新人请教





新成员

角  色:注册用户
发 帖 数:9
经 验 值:12
注册时间:2010-7-17
错误报告只在退出时能看到


关闭后在打开生成的错误报告里面居然是空的


是哪里的问题都不知道了。。。

这会不会是ExceptionLog的BUG

火人工作室
  • 联系我们 - 火人工作室 - 论坛存档 - 返回顶部
    Powered by BBSXP 2008 MSSQL © 1998-2010 Yuzi.Net
    Processed in 0.34 second(s)
    湘ICP备05008144号