C++ 동적할당 구조체 포인터, 다른 함수에서 사용 질문

조회수 1370회

안녕하세요. 간단한 코드를 만들었는데요. 문제를 아시는 고수님들의 조언을 듣고싶습니다.

  1. 구조체의 네임배열에 사람들의 이름을 담고 싶다.
  2. Input함수에서 플레이어 수를 입력받은 후 받은 수만큼 함수 내에서 포인터 Group이라는 새로운 배열을 힙에 할당했다.
  3. 이 힙에 할당받은 Group배열을 Discard라는 함수에서 사용하고싶다.
  4. 하지만 식별자 Group이 정의되어있지 않다고 오류가 뜬다.
  5. SUTDA * Group = new SUTDA[CountPlayer]; 추가시 입력값이 숫자여도 袴袴 식으로 글자 깨짐
#include <iostream>
using namespace std;
int CountPlayer;

struct SUTDA
{
    char Name[20];
};

void Input()
{
    cout << "(최대 10명) 플레이어 수를 입력하세요: ";
    cin >> CountPlayer;
    SUTDA * Group = new SUTDA[CountPlayer]; //힙에 할당했으니까 아래 함수에서도 쓸 수 있어야 되는 거 아니야?

    for (int i = 0; i < CountPlayer; i++)
    {
        cout << i + 1 << " 번째 플레이어의 이름을 입력하세요: ";
        cin >> Group[i].Name;
    }
}
void DistCard()
{
    for (int i = 0; i < 5; i++)
    {
        //SUTDA * Group = new SUTDA[CountPlayer]; //이걸 넣어서 출력시 입력값이 숫자여도 이상한 글자(袴袴袴袴袴袴袴袴袴袴袴袴)들 깨져서 나옴
        cout << Group[i].Name; //Group식별자가 정의되어있지 않다고 뜬다.
        cout << *Group[i].Name; //Group식별자가 정의되어있지 않다고 뜬다.
    }
}
int main()
{
    Input();
    DistCard();
}

2 답변

  • #include <iostream>
    using namespace std;
    
    struct SUTDA
    {
        char Name[20];
    };
    
    SUTDA* input(const int count)
    {
        SUTDA* player_group = new SUTDA[count];
        for (int i = 0; i < count; ++i) {
            cout << i + 1 << " 번째 플레이어의 이름을 입력하세요: ";
            cin >> player_group[i].Name;
        }
        return player_group;
    }
    
    void dist_card(const SUTDA* player_group, const int count)
    {
        for (int i = 0; i < count; ++i)
            cout << player_group[i].Name << '\n';
    }
    
    int main()
    {
        cout << "(최대 10명) 플레이어 수를 입력하세요: ";
        int player_count{ 0 };
        cin >> player_count;
    
        SUTDA* players = input(player_count);
    
        if (players)
            dist_card(players, player_count);
    
        if (players)
            delete[] players;
    
        return 0;
    }
    
    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
  • https://m.blog.naver.com/byunhy69/140112048564 에서 발췌해 오면,

    Microsoft Visual C++ Runtime Library (DEBUG_NEW가 선언된 상태) (1) 0XCD, 0xCDCD, 0xCDCDCDCD

    • 초기화 되지 않은 heap 메모리
    • malloc() 또는 new로 객체가 생성되고 아직 Write한 적이 없는 상태

    袴 는 cp949 인코딩으로 0xCDCD 입니다. 즉, new 로 메모리를 잡아놓기만 하고, 그 내용이 초기화되지 않았을 때의 내용임을 알 수 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)