程序报错:
Exception EAccessViolation in module GDI32.DLL at 0000A400.Access Violation at address 77F4A400 in module 'GDI32.DLL'.Read of address 0017C000.
怎么办?

解决方案 »

  1.   

    这通常都是没有初始化的指针造成的错误。
    Delphi 的对象其实全是指针,
    象Bitmap之类的不在控件板上的对象,定义了对象以后,其实只是定义了一个指针,用之前必须先用MyVarBitmap:=TBitmap.Create(Self)构造。否则必错无疑。
    (其他自己定义的对象也一样)
      

  2.   

    同意 radandgreensky(红绿天空)  没有初始化就会出现类似信息
      

  3.   

    这种问题一般是空引用(或者称之为空指针)引起的
    Delphi使用的是应用对象模型
    定义一个对象变量,其实只是定义了一个该类对象的引用,而引用的目标不存在
    这和C++不同
    引用类似于C++中的指针
    e.g.
    Type 
    TwzClass=class  //类的定义
    public
    i:integer;
    .......
    end;
    var
    wz:TwzClass; //其实只是定义了TwzClass的一个引用而已,
    wz1:TwzClass;
    wz.i:=9;    //出错,Delphi在编译时应该给出警告的

    正确的方法
    wz:=TWzClass.Create;  //生成一个TWzClass的实例,然后wz指向该对象而已


    wz1:=wz;   //wz1和wz指向同一对象

    如果
    wz1.i:=8;
    那么
    wz.i也应该为8


    在C++中
    定义
    class CwzClass
    {
    public:
    int i;
    };


    CwzClass c1,c2; //对象已经存在
    c1.i=9;
    c2=c1;   //把c1对象复制一份并赋值给c2,c1和c2各不相干,
    c2.i=8;
    此时
    c1.i为9
    c2.i为8比较Delphi和C++Builder的代码就可以知道了