ETC/Unity

[C#] The requested operation caused a stack overflow

Jade Choe 2024. 4. 22. 10:56
SMALL

유니티에서 The requested operation caused a stack overflow 오류가 발생했다.

 

타이틀에서 메인 게임 씬으로 넘어갈 때 발생했는데,

타이틀 씬에 들어가는건 게임매니저 외엔 수정한게 없는데 똑같은게 들어간 메인 씬은 또 잘 된다..;

 

그래도 알 수 없으니 콘솔에 뜬 호출스택을 하나하나 찾아가며 본 결과

setter에서 다른 값을 변경해줄 때 발생한 오류였는데

 

    public int playerStamina
    {
        get
        {
            return _playerStamina;
        }
        set
        {
            _playerStamina = value;
            if(_playerStamina <= 0)
            {
                currentTime++;
            }
            OnPlayerStaminaChanged?.Invoke(this, EventArgs.Empty);
        }
    }
    
    
    public InGameTime currentTime
    {
        get
        {
            return _currentTime;
        }
        set
        {
            playerStamina = playerSkills.maxStamina;
            
...

 

 

스태미너의 초기값이 0이어서 currentTime을 +1 시켰고,

currentTime에 스태미너를 max값으로 바꿔주게끔 해놓았는데....

 

maxStamina가 0으로 초기화 되어있었다...ㅡㅡ;;

 

맥스값이 0이니 초기할당 시 시간대 변경 호출->스태미너 0으로 설정->시간대 변경 호출->스태미너 0으로 설정...

무한 반복이 일어나 호출스택이 터져버린 것.

 

데이터를 새로 생성할 때 playerSkills 구조체의 초기값을 지정해주는 것으로 해결했다.

BIG