인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

움직이는YM님의 프로필 이미지
움직이는YM

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

함수 포인터 #1에서 질문

해결된 질문

작성

·

187

0

bool IsRareItem(Item* item)

{

return item->_rarity >= 2;

}

typedef bool(ITEM_SELECTOR)(Item* item);

Item* FindeItem(Item items[], int itemCount, 

ITEM_SELECTOR* selector)

{

for (int i = 0; i < itemCount; i++)

{

Item* item = &items[i];

if (selector(item))

return item;

}

return nullptr;

}

함수 포인터 1에서 설명해 주실 때 제 컴퓨터에서 이상한 부분이 있어서 질문드립니다.

강의에는 selector의 주소가 IsRareItem의 주소를 가지고 있습니다.

하지만 저의 경우

selector는 0x004c15d7 이 주소를 가지고 있고(옆에 뜨는 바는 CPP_STUDY.exe!FindeItem ~~ 이런식으로 표기되고 있습니다)

IsRareItem 함수를 메모리에 찍어보면 0x004C76A0 이 주소를 가지고 있습니다

그 와중에 F11로 넘어가다 보면 

if (selector(item))

return item;

여기 if 문에서 자연스럽게 IsRareItem 함수로 넘어가게 됩니다.

selector 와 IsRareItem 함수의 주소가 같아야 할 것 같은데 왜 달라도 작동하는지 궁금합니다.

2. 메모리 영역에서 코드 - 데이터 - 힙 - 스택영역중에 함수포인터를 배우고 보니

함수의 주소는 어디에 있는지 궁금해졌습니다. 데이터 영역에는 전역, static 변수의 주소와 값이 잡히고

스택영역에는 지역변수, return주소, 매개변수의 주소와 값이 잡힌다면

함수의 주소는 어느 영역에 있는건가요??? 코드 영역에 있는건가요?

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

1.
디버깅하면서 볼 때 가끔 이상하게 나오는 경우가 있으니
[정리]를 한 번 하고 다시 빌드해서 다시 살펴보시기 바랍니다.
그리고 설명으로는 잘 와닿지가 않는데 selector에 (IsRareItem으로 설정했음에도)
다른 주소가 있다는걸까요?
테스트하면서 스샷 첨부해주시면 감사하겠습니다.

2.
함수의 주소라는 곳으로 가면 실행할 코드들이 잔뜩 있으니
코드 영역이 맞습니다.


0

답변 감사합니다!

움직이는YM님의 프로필 이미지
움직이는YM

작성한 질문수

질문하기