|
잘못된 부분은 getTracker() 함수에 있네요. ^^
TRect trackerRect[8];
요렇게 변수를 사용하게 되면 getTracker() 함수에만 존재하는 지역 변수가 되어있는거죠;
저 함수가 끝나버리면 trackerRect 변수는 사라지게 됩니다. 그러니 포인터를 넘겨봤자.. 사라져버린 값을 넘기는 것이죠 -0-;;
따라서...
TRect * trackerRect = new TRect[8];
요렇게 new로 생성하시고 포인터를 넘기셔야.. DrawTracker 함수에서 이용하실 수 있겠습니다.;
나중에 delete 해주시는거 잊지 마시고요~ -0-;
이경준 님이 쓰신 글 :
: 안녕하세요. 학원에서 대충 C를배우고 프로그램을 하는터라 기본이좀 약합니다. ㅠ.ㅠ
: 어떠한 함수에서 TRECT의 배열을 리턴값으로 넘겨주고 싶습니다.
: TRect[] TCiObject::getTracker()
: {
: }
: 요렇게 했더니 에러가 나네요.
: 그래서 기억을 되살려보니 배열은 포인터다! 라고 얼핏들은거같아 이렇게작성했습니다.
:
: TRect* TCiObject::getTracker()
: {
: TRect trackerRect[8];
: trackerRect[0]=TRect(0,0,10,10);
: trackerRect[1]=TRect(45, 10, 55, 20);
: .
: .
: .
: return trackerRect;
: }
:
: 뭐 대충 이렇게 짰습니다.
: 문제는 배열을 저 리턴된 주소값으로 어떻게 배열로 다시 만드냐 하는건데요...
: 저 주소값을 다시 받는 함수가 있습니다.
:
: void TMainForm::DrawTracker(TRect* pTrackerRect)
: {
: TRect tempRect;
: tempRect = *pTrackerRect;
: MainBoard->Canvas->Rectangle(tempRect); //첫번째 트래커박스
: tempRect = *(pTrackerRect++);
: MainBoard->Canvas->Rectangle(tempRect); // 두번째 트래커박스
: }
:
: 이렇게 하면 첫번째꺼는 받아 지는데 두번째 껀 안받아져요. ㅠ.ㅠ
: watch 해보니까 첫번째는 잘들어갔는데 두번째에는 엉뚱한값이 있는걸보아
: *(pTrackerRect++) 에서 잘못한듯합니다.
: 배열 두번째것을 가져와야 하는데 말이죠..
: 조언 부탁드립니다.
|