제 목 19강 구조체 몬스터 랜덤 생성 갯수 계속 같음
작성자 박종욱 등록날짜 2021-08-22 06:28:51 / 조회수 : 116
강좌명 [패키지] 게임 프로그래밍 입문패키지
  • 19강 구조체를 배울 때 입니다.

     

    #include

    srand(time(NULL));

    rand();

     

    위에 해주고서 rand() 를 사용해서 계속 난수를 뽑고있는데요.

    int nNumOfMon = 10 + (rand() % 11);        // 생성 할 몬스터 숫자를 랜덤으로 결정 ( 10 ~ 20 )

    이 부분에서.. 강의와 똑같이 해주었는데도 빌드 했을때 나오는 몬스터 생성 숫자가 계속 같습니다.

    물론 껐다 켜서 조금 시간이 지나면 다른 값이 나옵니다만

    console 창을 껐다가 바로 빌드를해서 프로그램을 실행을 시키면

    똑같은 숫자가 나옵니다. 몬스터 생성 13마리라고 하면 계속해서 13마리가 나오고

    console 창을 끄고 조금 오래 있다가 다시 빌드해보면 또 다른 값이 나옵니다.

    하지만 다른 값이 나와도 똑같이 껐다가 바로 빌드하면 또 같은 값이 나옵니다.

     

    왜 이런것일까요..

     

    그리고 맨 위에 초기에 쓰레기 값(?)이 들어가는것을 방지하기위해 rand()를 한 번 돌려준다고 하셨던거같은데

    여기서 작은 오류가 생깁니다.

     

    Severity    Code    Description    Project    File    Line    Suppression State
    Warning    C6031    Return value ignored: 'rand'.    ConsoleApplication5    C:Userslantesource eposConsoleApplication5ConsoleApplication5ConsoleApplication5.cpp    21    
     

    라고 하네요.

    이것은 실행엔 문제가 없지만... 

    rand() 는 return 타입이 int인데 그 int 형 값을 반환해도 받아줄 변수가 없어서 그런 것 같습니다.

    이게 문제인지..?

     

    뭐가 문제인지를 모르겠습니다. ㅜ

     

     

     

     

    ㅡㅡㅡㅡㅡㅡ

     

     

    아니면 혹시.. 제가 마지막에 delete[] 를 해주지 않았기 때문인가요?

    프로그램이 종료되면 그 즉시 new로 할당된 메모리가 전부 해제된다고 배운거같은데

    그런데 프로그램이 종료되어도 메모리 해제에 시간이 걸려서

    console 창을 껏다가 바로 켜면 아직 해제되지않은 메모리때문에

    영향을 미치는것일까요?

    이런 경우가 있나요..?

     

    어차피 프로그램 흐름상 난수생성을 다시 하니까 전혀 상관없는 이야기 같기도 한데요..

    추측해봤습니다.

     

  • 작성자 : 게임클래스 / 등록날짜 : 2021-08-23 09:41:21
  • 안녕하세요 게임클래스 프로그래밍 강사 하민우 입니다.

     

    질문 내용만으로는 어떤 부분을 잘 못 하셨는지 확인을 할 수가 없습니다.

    int nNumOfMon = 10 + (rand() % 11); 

    위 에서 랜덤 숫자 생성 후 단순히 cout 통하여 nNumOfMon 값을 한번 출력해 보시기 바랍니다.

    rand() 함수 호출에 문제가 있는 것인지 아니면 위 변수 값을 사용하여 생성하는 부분에 문제가 있는 것인지 확인 하실 수 있을 겁니다. 확인 이후 문제에 대해서는 질문 내용만으로 확인이 불가능 합니다.

     

    경고가 뜨는 부분 관계 없습니다. 단순히 반환값을 사용하지 않아서 뜨는 경고 입니다.

    그리고 현 비쥬얼 스튜디오 버전에서는 srand 함수 이후 rand() 한번 호출 안하셔도 됩니다. 옛날 버전에서 버그가 있었던 적이 있어서 저렇게 항상 프로그램 시작시 rand 함수를 한번 호출 했었는데 정확히 어떤 버전부터인지는 모르겠으나 현재는 버그가 발생하지 않는 것으로 확인 됩니다. 

    --------------------------------------------------------------------------------------------------------

    delete를 해주지 않는 부분과 랜덤 값과는 관계는 없습니다.

    단지 new 로 할당한 메모리를 delete 하지 않게 되면 프로그램 종료시 자동 해제 되지 않고 메모리 누수로 남게 됩니다.

    메모리 누수가 되면 할당 된 상태로 유지되는 것이기 때문에 해당 메모리 부분은 해제 전까지 사용할 수 없게 됩니다.

    누수 된 메모리에 대해서 윈도우가 자체적으로 관리를 해주기 때문에 일정 시간이 지나면 해제가 되기는 하지만 그래도 가능하면 프로그램 상에서 new 키워드를 사용해서 할당을 했다면 꼭 delete 를 해주도록 해야 합니다.

     

    게임 개발자가 되는 가장 빠른 길, 게임클래스!