使用Delphi7开发工具,自定义了主窗体MainForm类、B类、C类,其中主窗体类、B类都在Uses部分引用了C类,B类中频繁的创建、释放C类,主窗体类使用了TClientSocket控件,在该控件的Read事件中使用了C类的两个函数,程序在编译的时候没有报错,但现在出现的问题是:这个程序运行一段时间后,就突然跳出个错误窗口,提示“空指针”错误,程序就彻底停止运行了;
我想问问高手,B类中频繁的创建、释放C类,会不会对主窗体类中使用C类造成影响?是不是会造成这个“空指针”错误?

解决方案 »

  1.   

    显然是在其他线程中操作主线程中的变量导致的,对于老版本,可以使用Synchronize方法,新版本(我忘记从哪个版本开始的,但是很久了)可以直接用组件的BeginInvoke+匿名方法
      

  2.   

    问题是这程序没有使用多线程,就是几个自定义类,只有一个类操作了串口,其他类都是处理TClientSocket控件发送数据,接收数据用的。
      

  3.   

    你是没有使用,但是TClientSocket用了... 
      

  4.   

    类的引用中,引用了释放的nil值。解决此类问题,要从设计上解决。
      

  5.   

    你说的是“主窗体”对象和“B”对象使用到了公共对象“C”,这肯定会出问题呀,当“主窗体”要使用“C”时可能C没有实例化或已被释放,低级错误呀!
    正确的使用方法有三种:1.将这两个函数放到公共单元中,不要放到类中;2.在这两个函数前面加上class关键字作为静态方法使用(但必须保证方法内部没有调用类的其它资源);2.同方法1有些类似,将所有公共函数封装到静态类中(所有方法前面加上class关键字)。
      

  6.   

    你在使用某个类之前用assigned判断一下该类是否存在,如果不存在可以创建一个