'포인터'에 해당되는 글 1건

  1. 2006/05/15 경험담 - 잘못 된 포인터 사용에 의한 버그

경험담 - 잘못 된 포인터 사용에 의한 버그

|

잘못된 포인터 사용에 의해서 버그가 일어났다.
포인터는 꼭 메모리가 할당된 것을 가르킨다는 것을 전제하에 이용해야 한다.

잘못된 예)

LPDWORD lpFileSizeHigh;
DWORD fileSize = GetFileSize(hSearch,lpFileSizeHigh);

문제점 -
DWORD GetFileSize(
  HANDLE hFile,
  LPDWORD lpFileSizeHigh
);

이 것을 보고, lpFileSizeHigh에 LPDWORD 값을 넘긴게 잘못이었다.
LPDWORD lpFileSizeHigh; <- 이것은 포인터만 생성됐고, 포인터가 가리키는 것이 없다.
즉, 메모리 할당이 안되어있다. 그래서 lpFileSizeHigh도 쓰레기 값으로 메모리를 가리키고 있다.
GetFileSize에 저 포인터를 넘기면서 lpFileSizeHigh가 쓰레기 주소값을 가지고 있으므로
어디를 변경시킬지 모른다는 것이다.
그런데 치명적인 주소는 아니었는지 프로그램은 다운되지 않고 사소한 동작의 오류만 있었다.

그래서 저것을
DWORD lpFileSizeHigh;
DWORD fileSize = GetFileSize(hSearch,&lpFileSizeHigh);
으로 바꾸니 문제가 해결 되었다.

이 문제는 가끔은 잘 되고 가끔은 잘 안된다는 것이었다.
치명적이지 못한 버그이기에 무엇이 문제인지 파악하기 힘들었었다.
어떻게 보면 간단한 문제지만 실수로 넘기기 쉬운 부분이다.

즉, 포인터를 사용할때는 항상 할당된 주소를 이용해야 한다는 것을 염두에 두고 프로그래밍을 해야한다.

Trackback 0 And Comment 0
prev | 1 | next