🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

원인이 뭔지 잘 모르겠습니다 ㅠㅠ

22.07.06 19:52 작성 조회수 178

0

안녕하세요 열공하고있는 초보 학생입니다!

강사님의 강의를 여러번 돌려보면서 복습차 텍스트 RPG를 만드는 중에 이해를 못하는 부분이 생겨서 질문드립니다.. 이것때문에 어제 오늘 뇌가 폭발할 지경이네요!

 

struct Playerinfo
{
    int Hp;
    int Atk;
    int Def;
};

void EnterLobby();
void Stat(Playerinfo& info);
void UserInfo(Playerinfo& ttt);

int main()
{
    Playerinfo player;
    EnterLobby();
    UserInfo(player);
}

void EnterLobby()
{
    cout << "(1) 테스트입니다." << endl;
    cout << endl;

    int userinput;
    cin >> userinput;

    Playerinfo player;

    if (userinput == 1)
    {
        Stat(player);

        cout << player.Hp << " " << player.Atk << " " << player.Def << endl;

    }
}

void Stat(Playerinfo& info)
{
    info.Hp = 100;
    info.Atk = 100;
    info.Def = 100;
}

void UserInfo(Playerinfo& player)
{
    cout << player.Hp << " " << player.Atk << " " << player.Def << endl;
}

 

원래는 각종 기능을 넣어서 만들다가

중간에 막히는 부분이 생겨서 다 지우고

테스트 삼아서 위에처럼 작성해봤는데

여전히 똑같은 문제가 발생하고 있습니다.

 

이렇게 작성 후 실행을 하고 1을 누르면

 

 

처음에 참조로 수정했던 Hp, ATK, DEF 가

UserInfo 함수로 넘어와서 다시 참조로 출력해보면 괴랄한 숫자로 바뀌어버리는데

 

이게 도대체 무슨 이유일까요..

지금 C++ 공부시작한지 한달도 안되어서

겨우겨우 포인터랑 참조를 몇번씩 돌려가며

열공중인데 복습차원에서 만들다가 이부분이

막혀서 원인을 모르겠습니다 ㅜㅜ

 

제발 도와주세요~!!

답변 2

·

답변을 작성해보세요.

1


엉뚱한 PlayerInfo를 채웠기 때문입니다.
EnterLobby가 호출 완료되면, 스택 영역은 유효하지 않게 바뀝니다.
그리고 애당초 main()의 PlayerInfo는 채운 적이 없습니다!

0

skaqk124님의 프로필

skaqk124

질문자

2022.07.06

뒤에 강좌를 보고 다시 오니 이해가 완전히 되었습니다! 감사합니다!

초보적인 실수를 했네요!

빠른 답변 감사합니다!!

채널톡 아이콘