在程序中,有这样的操作:一个unitA中定义另一个unitB的变量,在unitB中通过
unitA.ExunitB := self;的方式初始化。在一系列的操作后,有的时候会出现
“invalid pointer”的错误。(在程序中这种指针很多。可能会在unitA里面创建n多的unitB,在unitC中对unitB中的数据进行处理,又要定义  unitC.ExunitB :=self;}而且这种错误很随机,我想找的时候,找不到。冷不丁又出来了 。请教问题:
  1:一般这种关系最好处理方法是什么?
  2:这种冷不丁出来的错误,我该怎样捕捉到,可以进行跟踪处理?谢谢各位的帮忙。
分不是问题,只要有解决办法。

解决方案 »

  1.   

    处理有不可知错误,主要是靠try...except...end;
    那出现的错误应是你违规用了指针,否则不会有错的
      

  2.   

    最好先从思想上作起。
    保持一个那里申请那里释放的原则,
    入口前检查参数完整性。
    跨单元引用时,尤其重要,
    我宁愿在UnitB中,提供访问xxx数据的接口函数,也比让UnitA直接访问甚至释放UnitB中的数据强很多倍。
      

  3.   

    同意 kiboisme(还是铁棒.....针) 。
    尽量不要使用全局变量,如果必须,那么使用函数来统一访问该变量,尤其是指针变量。
      

  4.   

    谢谢,大家。
    同时接受批评。
    这个问题到现在一直没有解决,程序写到现在,没有好的思路,我还不想重组结构。
    不过是要好好整理程序了。to FrameSniper(§绕瀑游龙§) :
     
     希望你不是笑话我,连描述也描述不清楚。
     :)  unitB中定义unitA的类型的指针 pUnitAinUnitB。通过通过该指针在unitB中操作UnitA的一系列过程和变量。于是就出现了在unitB中出现的“invalid pointer”的错误。
     
     希望你会有什么高见。 谢谢
      

  5.   

    程序的主要过程,我再描述,让各位大侠也看看有没有其他更好的解决办法。  UnitA :基于Frame的Unit。
    通过UnitA要动态创建N多个UnitB的对象LIST
    其实主要想应用UnitA来管理上述N多个UnitB个对象。UnitB :基于Frame的Unit。
         除了本Frame的功能实现,还要从UnitA中获得LIST的环境控制变量值
         于是UnitA创建每一个UnitB时,定义了UnitB.EeunitA := self;的指针操作  UnitC:基于Frame的Unit。
         其主要是UnitB中的功能实现调用的frame。但是在UnitC的操作中也要对UnitB的数据进行操作
       
         于是在UnitB的功能实现时又定义了UnitC.ExunitB := Self; 上述就是我想要做的事情,和现在所采取的方法,在处理中会出现
     ------------------------Project ProjectA.exe Raised exception class EInvalidPointer with Message “Invalid pointer operation “.Process Stopped ,Use step or run to continue.  上述就是出现的错误。
      出现错误是不可控制的,有的时候有,有的时候每有(也有可能是有时触发了某个函数,有时没有)。  希望可以得到大家的帮助。  
      

  6.   

    程序的主要过程,我再描述,让各位大侠也看看有没有其他更好的解决办法。  UnitA :基于Frame的Unit。
    通过UnitA要动态创建N多个UnitB的对象LIST
    其实主要想应用UnitA来管理上述N多个UnitB个对象。UnitB :基于Frame的Unit。
         除了本Frame的功能实现,还要从UnitA中获得LIST的环境控制变量值
         于是UnitA创建每一个UnitB时,定义了UnitB.EeunitA := self;的指针操作  UnitC:基于Frame的Unit。
         其主要是UnitB中的功能实现调用的frame。但是在UnitC的操作中也要对UnitB的数据进行操作
       
         于是在UnitB的功能实现时又定义了UnitC.ExunitB := Self; 上述就是我想要做的事情,和现在所采取的方法,在处理中会出现
     ------------------------Project ProjectA.exe Raised exception class EInvalidPointer with Message “Invalid pointer operation “.Process Stopped ,Use step or run to continue.  上述就是出现的错误。
      出现错误是不可控制的,有的时候有,有的时候每有(也有可能是有时触发了某个函数,有时没有)。  希望可以得到大家的帮助。