我有一个静态的二维数组Array[0..100] of array[0..1] of Tpoint,如果我要清空它,除了全部赋0以外,还有什么好办法吗?

解决方案 »

  1.   

    赋0不等于清空啊,需要执行元素对象的free方法,如果元素不是对象类型的话,不要管它了,程序退出后会自己清空。
    相应的语句就是两个for语句咯
      

  2.   

    不太明白,你的意思,是否下面:FillChar(urarray, 101*2*SizeOf(TPoint), 0);
      

  3.   

    不太明白,你的意思,是释放?还是清空?
    是否下面:FillChar(urarray, 101*2*SizeOf(TPoint), 0);
      

  4.   

    顶楼的大哥,你把结构体用Free给我试试看。
    最简单行之有效的方法就是一个二维循环。
    for i := 0 to 100 do
      for j := 0 to 1 do
      begin
        a[i][j].x :=0;      //这里的a是TPoint类型
        a[i][j].y :=0;
      end;
      

  5.   

    var
      a:Array[0..100] of array[0..1] of Tpoint
    if Assigned(a) then
      a:=nil;
      

  6.   

    To firetoucher:是释放!
    To SmallHand and cxz7531:nil只能赋给指针类型吧?
    To Linux2001:因为这些点集PointArray中的每一个点都是线段的端点,都带有一定的操作,所以,在擦除线段的时候必须把这些点也擦除掉。由于这些点的加入分别是在mousedown
    和mouseup中加入的,所以如果我采用动态数组的话就很不方便操作,常常会发生accessViolence的异常,你看有什么好地解决方法没有?
      

  7.   

    对不起楼主,没有看到你的后来的发言!既然是释放资源,我觉得应该是这样:
      将二维数组的每个的元素置为nil。即:for i:= 0 to 100 do
         for j:= 0 to 1 do
           a[i][j]:= nil;
      

  8.   

    但是我的二位数组是TPoint类型的,而不是Pointer,不能赋nil
      

  9.   

    FillChar(array, 101*2*SizeOf(TPoint), 0);
    即可清0
      

  10.   

    TPoint = packed record
        X: Longint;
        Y: Longint;
      end;
    可看到为记录型,又不是对象型,只能请0
      

  11.   

    to Linux2001(我想买手提电脑啊!) 
    你要先看指针里存放的是什么东西啊。
      

  12.   

    我以为是class呢?
    如果是记录那么无法清空,建议你重新设计数据结构!其实你完全可以将 定义指针指向TPoint,这样比较好处理!
    这是我的一点建议!因为你不知道(0,0)状态处于释放还是一个实在的点。
      

  13.   

    呵呵,我现在的做法是将要清空的点都放到point(-600,-600)中去,反正只是为了方便绘图!