for i:= 0 to RSessionList.Count -1 do
  begin
    New(RTempSession);
    RTempSession:=rsessionlist.Items[i];
    memo1.lines.add('当前用户:'+RTempSession^.RemoteIP +':'+inttostr(RTempSession^.RemotePort));
    Dispose(RTempSession);
  end;
循环输出数值的时候,总是循环最后一个指针项目的内容。
哪里错了?

解决方案 »

  1.   

    没有问题,你是不是rsessionlist中的内容有问题,都是最后一个内容
      

  2.   

    new出来的空间,最后(程序退出或list[i]被删除)才能dispose的
      

  3.   

    new出来的空间,最后(程序退出或list[i]被删除)才能dispose的
      

  4.   

    new出来的空间,最后(程序退出或list[i]被删除)才能dispose的
      

  5.   

    List里都是最后一个指针项目的内容吧?
      

  6.   

        New(RTempSession);  ->这里申请内存,
        RTempSession:=rsessionlist.Items[i]; ->这里又给这个指针赋值,指针丢失,内存泄露    Dispose(RTempSession);->这里释放,实际上是释放了TList中的指针内存,问题多多一般来说就是这样,只有在删除的时候才使用Dispose,在增加的时候才使用New
      for i:= 0 to RSessionList.Count -1 do
      begin
        RTempSession:=rsessionlist.Items[i];
        memo1.lines.add('当前用户:'+RTempSession^.RemoteIP +':'+inttostr(RTempSession^.RemotePort));
      end;
      

  7.   

        New(RTempSession);  ->这里申请内存,
        RTempSession:=rsessionlist.Items[i]; ->这里又给这个指针赋值,指针丢失,内存泄露    Dispose(RTempSession);->这里释放,实际上是释放了TList中的指针内存,问题多多一般来说就是这样,只有在删除的时候才使用Dispose,在增加的时候才使用New
      for i:= 0 to RSessionList.Count -1 do
      begin
        RTempSession:=rsessionlist.Items[i];
        memo1.lines.add('当前用户:'+RTempSession^.RemoteIP +':'+inttostr(RTempSession^.RemotePort));
      end;
      

  8.   

    楼上说的很清楚。你使用指针不是每个地方都需要new的。