我的程序在运行时,经常出现下面的错误。例如,多个子窗体,随机打开随机关闭,每一个都有出错的可能。特别是释放Tstringlist对象时,都会出现这样的错误。
    具体的错误信息是:
    Project XXX.exe raised exception class EAccessViolation with message‘access violation at address...00403D10 in module‘XXX.exe'.Read of address 01017FFC’
    请问,都有哪些原因会导致这类错误的出现?该如何解决?
    等待高手赐教!多谢!!!

解决方案 »

  1.   

    1、如果有引用DLL的函数,而你的DLL函数引用不正确会引起。
    2、指针指向的地址不存在也会
      

  2.   

    下面这段就是经常出错的地方,cbschid、cbdepid和cbclassid是三个ComBoBox,分别列出院系代号和班级代号,希望在选择不同的院系之后,cbclassid能够列出相应院系的所有班级procedure Tfrmathedit.cbdepidSelect(Sender: TObject);
    var
      list: Tstringlist;
      i: integer;
      tmpstr1,tmpstr2: string;
    begin
      list := TStringlist.Create;
      list.Clear;
      tmpstr1 := string(cbschid.Text);
      tmpstr2 := string(cbdepid.Text);
      getlist(list,'pro_get_class',tmpstr1,tmpstr2,'');//根据学校代号和院系代号取得班级
                                                         代号,存入list中
      cbclassid.Enabled := true;
      cbclassid.Color := clWindow;
      cbclassid.Clear;
      for i := 0 to list.count -1 do
        cbclassid.Items.Add(list.Strings[i]);
      list.Free;     //该句注释掉后就不会报错了,但list是动态创建的,用完不应该释放吗?
      list:=nil;
    end;
      

  3.   

    list.Free;
      list:=nil;//这句干吗用的?都free掉了还为nil,你把这句注释掉试试
      

  4.   

    没用,还是报错。
    getlist是我在动态链接库中写的过程,会不会是调用dll有问题?
      

  5.   

    给你个简单的方法
    先:remove file from project
    再:add file from project
    就不会有问题了,不过下次还有可能出现
    再这样又可以解决