마음의 안정을 찾기 위하여 - Create 되지 않은 Class의 Free 호출시 Access Violation
2266665
1002
804
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
Create 되지 않은 Class의 Free 호출시 Access Violation
My Library | 2006/09/28 01:06

※ 이 글은 Delphi6을 예로 하였으며, Delphi7에서는 정상적으로 동작한다는 의견도 있었으나,

    실제로 확인은 해보지 않았음.

 

 

    일반적으로 코딩시 Class를 생성하면 Try~Finally 구문을 이용하여 Class를 Free시켜주는

    방식을 취하게 된다.

 

    Bitmap := TBitmap.Create;

    Try

    Finally

       Bitmap.Free;

    End;

 

    물론 정상적인 방법대로라면야, 저렇게 하면 되겠지만..........

 

    그 길이가 길어지는 경우 어떠한 사정에 의해서 TBitmap이 Create되지 않은채

    Free가 호출되어지는 상황이 있을수도 있게 된다.

 

    어떤 경우인지는 따지지 마라... 따지고 들어가면 골아프다. -_-;;;;

 

    아무튼 TPrinter를 이용하여 이미지를 출력하는 프로그램을 작성중에, 가끔씩 이미지가

    출력이 되지 않는다는 버그가 있다고 하여, 소스를 보던중...

 

    Create되지 않은 Bitmap을 Free할수도 있는 경우를 발견했는데.............

 

    샘플 프로그램을 만들어서 Test를 해보니 Access Violation 오류가 발생하였다.

 

    Bitmap.Handle / Bitmap.HandleAllocation으로는 체크가 되지 않았고...

    Assigned() 함수로도 Bitmap이 생성되어 있는것으로 나오니.. 환장할 노릇....

 

[샘플코드]

procedure TForm1.Button1Click(Sender: TObject);
Var
  Bitmap : TBitmap;
begin
{ 다른 코딩 }

{ 어쩌꾸쩌쩌꾸 }
  Try
  Finally
       If Assigned( Bitmap ) Then
       FreeAndNil( Bitmap );
  End;
end;

 

위의 코드는 에러가 나는가? 나지 않는가?

 

Access Violation 에러가 발생한다.................

 

죠낸 저거 어떻게 확인해야 하는거야..... 쒸.. -_-;;;;

아무튼 죠낸 쪽팔리기도 하고......... 개발로 몇년동안 밥먹고 산다는 놈이.... 에혀.....

 

결론은 "Garbage Value"

 

쓰레기값이 들어갈수 있는 Bitmap 변수를 초기에 Nil로 초기화시킨후에 수행하면,

Assigned(Bitmap)에서 Bitmap이 Nil값이므로, Free를 수행하지 않게 하면 되는것이다.

 

죠낸 알고나니 간단한데... 이것때문에.. 한참 고민했다. 젝일헐.....

 

공부해야대. 공부 ㅠㅠ

 

 

 

Bitmap := Nil;

2006/09/28 01:06 2006/09/28 01:06
Article tag list Go to top
View Comment 0
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
 
 
 
 
: [1] ... [833][834][835][836][837][838][839][840][841] ... [1317] :
«   2024/03   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
전체 (1317)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (5)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (6)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)