inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

미해결

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

함수 호출을 하다가 리턴하기 전에 eip가 널이 되면 어떻게 동작하는지 궁금해서 한번 시도해봤는데요. 예를 들면 main() 함수에서 A() 함수를 호출하고 또 A() 함수에서 중간에 B() 함수를 호출하는데 B() 함수를 리턴하기 전에 eip 값을 0x00000000과 같은 널 값으로 고쳐보았습니다. 이렇게 하면 리턴하고나서 뭔가 에러?엑세스 위반? 이라는 게 뜨는 것 같더라구요 근데 만약 이렇게 해서 엑세스 위반이 났을 때 어떤 함수를 호출할 때 잘못됐는지 디버깅 상에서 추적하려면 어떤 순서로 추적해야하는지 궁금합니다!

  • 함수호출
  • 스택프레임
  • C++
dbdmswl5218 댓글 1 좋아요 0 조회수 330

함수 포인터 check_fnc에 관해 질문이 있습니다.

미해결

홍정모의 따라하며 배우는 C++

#include <iostream> #include <array> using namespace std; bool isEven(const int& number) { if (number % 2 == 0) return true; else return false; } bool isOdd(const int& number) { if (number % 2 != 0) return true; else return false; } void printNumbers(const array<int, 10>& my_array, bool (*check_fnc)(const int&)=isEven) { for (auto element : my_array) { if (check_fnc(element) == true) cout << element << " "; } cout << endl; } int main() { std::array<int, 10> my_array = { 0,1,2,3,4,5,6,7,8,9 }; printNumbers(my_array); printNumbers(my_array, isOdd); return 0; } 에서 if (check_fnc(element) == true)부분인데요, check_fnc가 함수 포인터고 이것이 함수의 주소를 저장하니까 isEven으로 기본값을 설정하면, 포인터가 isEven으로 찾아가서 함수를 호출하는 것이 맞나요? 그리고 printNumbers(my_array, isOdd)부분에서는 check_fnc가 isOdd의 주소를 저장했으니까 if (check_fnc(element) == true)의 check_fnc가 isOdd를 호출하는 것도 맞나요??

  • 함수포인터
  • 함수호출
  • C++
Ambition 댓글 1 좋아요 1 조회수 389

인기 태그

인프런 TOP Writers

주간 인기글