Q&A

  • Access violation at address... 에러 때문에...
제목과 같은 에러가 계속 발생합니다.
정말 미치겠습니다.

데이터를 모두 불러오고 나서 에러 메시지, 출력 미리보기 후 에러 메시지, 출력 중 에러 메시지, 프로그램, 작업 창 종료시에 에러 메시지...

Access violation at address...(뒷에 붙는 숫자는 다양하게 발생합니다.)

user 운영체제는 98과 xp 입니다.
저는 windows2000 이구요. 저는 그런 경우가 없었습니다.

ㅠㅠ 엉엉

어떤 건 프로그램이 종료되고 어떤건 그냥 확인만 하면 작업이 진행되구요

에러 나고 다시 하면 아무 문제가 없었습니다.

소스상에도 별 문제가 없는거 같은데요...
다른 건 모르겠는데..
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   print_form := Tprint_Form.Create(Self) ;
   with print_form do begin
     QuickRep1.DataSet          := Query_imsi;
     QRDBT_pj_code.DataSet      := Query_imsi;
     .
     .
     .
     .
     Query_imsi.First;
     QuickRep1.Preview ;
     close ;
   end ;
end;
이렇게 했는데 도데체 에러가 왜 나는지요..
답답해 죽겠습니다... 업체에선 이거 못 잡으면 완료 보고 안해준답니다.
5  COMMENTS
  • Profile
    문태용 2003.06.04 22:05
    동적으로 생성한 폼의 메모리 해제가 안돼서 그런 문제가 발생한거 같네요..
    일반적으로 오브젝트를 동적으로 생성했을 경우 해당 프로시져가 완료되면 메모리 해제를 시켜주셔야 합니다..

    님의 경우는 Close 문 다음에
      print_form.Destroy;
    문을 추가해 주셔야 할거 같네요..
    그럼 즐프....

  • Profile
    별볼일없는 2003.06.05 01:32

    에구... ㅜㅜ
    form close 절에
    이 부분을 추가 했는데.. 위 에러가 똑같이 나네요..
    print_form.Destroy;

    프린트 하는 부분에서는 에러가 안나는데... 쩝!

    저는  
    form close 절에
    Action := CaFree;
    를 쓰는데 두개를 다했다가 에러가 나서 action := cafree 를 지우고 해도 똑같은 현상이구요
    print_form.Destroy; 을 지우니깐 에러가 안나네요...

    정말 미치겠습니다. 이 일이 하루 이틀에 걸쳐 일어난게 아니고 두달이 넘었습니다.
    계속 검토한다 했는데.. 원인을 모르니... 우왕~~ ㅠ.ㅠ
  • Profile
    yosule 2003.06.05 08:19


    메모리해제는 위에 분의 답변이 맞습니다.
    메로리해제의 대상을 못찾기 때문인것 같군요.

    procedure Form1.Button1Click(Sender:TObject);
    var
       TempPrintForm : TPrintForm;  <-- 함수나 프로시져에서 선언
    begin
       TempPrintForm := TPrintForm.Create(Self);
       .
       .
       TempPrintForm.Free;
    end;

    TempPrintForm.Free를 없애고 TempPrintForm의 Close이벤트에서
    caFree를 할당하셔도 되고요.

    질문하신분의 소스내용중 TempPrintForm이 전역으로 선언되지 않았나
    싶네요. 아무리 해제를 할려고 해도 찾을 수가 없는거죠. 그래서 메모리
    침범 에러가 나는 겁니다.

    Access violation은 나의 소스중 어딘가에서 메모리 참조,해제를 잘 못
    했구나 생각하시고 분석하시면 거의 다 해결할 수 있을꺼라 생각되네요.

    ----------------------------------------------------------------

    혹시 TempPrintForm을 자동생성했는지요?  Create, caFree, Free 등의
    내용은 필요없습니다.
  • Profile
    별볼일없는 2003.06.05 19:22
    첫 질문 내용에 보면
    폼 create 시키는 부분과 close 해서 하는데
    메모리 해제는 해당 form close 절에 cafree 했거든요

    그리고 소스올린 부분은 한 예로 올렸고... 해당 폼에 데이터를 다 뿌리고 나서 에러가 삥 뜯니다... 그리고 출력 버튼을(미리보기후) 눌러 출력중에 삥 에러가 뜨고, 미리보기 하는 도중 데이터 보여주다가 삥 뜨고,

    정말 답답합니다. 이게 계속 안되면 원인을 찾겠는데
    한 10번 정도 같은 작업을 반복했을때 나는 경우가 있고(똑같은 데이터로 제가 반복해서 테스트 했습니다.)
    50번을 해도 에러가 안나는 경우가 있습니다.
    휴~~ (__)...

    ps : 정말 짱나는건 이건 제가 만든게 아니라 다른사람이 하다가 도망가서 제가 맡게된 프로그램입니다. - 사람이 미워집니다.
  • Profile
    ㉯㉰감자 2003.06.06 00:45
    print_form := Tprint_Form.Create(Self) ;

    이걸

    print_form := Tprint_Form.Create(nil) ;

    요렇게 한번 해보세요

    그리고 print_form은 전역인가요?

    지역으로 빼심이 좋을듯 한데요...