Q&A

  • Freemem 사용시 뻗어버립니다.
윈도우 프린트창 보여주는 건데요.

실행하면 프로그램이 뻗어버립니다.

Access Violation..

뭐가 문제일까요?



procedure TFmPrintHtm.ActionPrintExecute(Sender: TObject);

Var

P : PChar;

begin

// Print page...

if cPrintFile = '' then Exit;

GetMem(P, Length(cPrintFile) + 1);

if p= nil then exit; //kwj

ShellExecute(Handle,'Print', StrPCopy(P, cPrintFile), nil, nil, SW_SHOW);

FreeMem(P,Length(cPrintFile) + 1); //여기서뻗음.

ActionExitExecute(nil);

Application.ProcessMessages;

end;







위코드를 아래처럼 stralloc를 사용하면 잘 안뻗는데,

역시 5번정도 실행하면, 잘못된 연산을.. 에러 납니다.



if cPrintFile = '' then Exit;

P := stralloc(Length(cPrintFile)+1);

if P= nil then exit; //kwj

ShellExecute(Handle,'Print', StrPCopy(P, cPrintFile), nil, nil, SW_SHOW);

StrDispose(P);



0  COMMENTS