C++ 동적할당 구조체 포인터, 다른 함수에서 사용 질문
조회수 1370회
안녕하세요. 간단한 코드를 만들었는데요. 문제를 아시는 고수님들의 조언을 듣고싶습니다.
- 구조체의 네임배열에 사람들의 이름을 담고 싶다.
- Input함수에서 플레이어 수를 입력받은 후 받은 수만큼 함수 내에서 포인터 Group이라는 새로운 배열을 힙에 할당했다.
- 이 힙에 할당받은 Group배열을 Discard라는 함수에서 사용하고싶다.
- 하지만 식별자 Group이 정의되어있지 않다고 오류가 뜬다.
- 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 로 메모리를 잡아놓기만 하고, 그 내용이 초기화되지 않았을 때의 내용임을 알 수 있습니다.
댓글 입력