20강 중간 부분까지 수업을 듣고 실행하는데 사진 처럼 예외가 처리되지 않음이라고 오류가 뜹니다
소스 코드를 잘못 작성한건가 싶어 확인해보았는데 코드에는 이상이 없는 것 같습니다 뭐가 문제일까요?
아래는 실행 소스 코드입니다
// ConsoleApplication15.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
#include "pch.h"
enum E_SHAPE { E_SPADE, E_DIA, E_HEART, E_CLOVER, E_MAX};
enum E_SELECT {E_QUIT, E_HIGH, E_LOW, E_SEVEN };
// 하이로우세븐
// 52 장의 포커 카드 사용
// 게임 시작 후 5장의 카드를 오픈해서 보여줍니다.
// 그리고 그 다음 1 장이 7보다 크다, 작다, 같다를 맞추는 게임
struct tagCard
{
char* szShape; // 문자열 값
int nNumber;
};
void InitCards(tagCard* cards); // 전체 카드 초기화
void Suffle(tagCard* cards); // 카드 섞기
void Print(tagCard* cards); // 전체 카드 출력
int main()
{
tagCard stCards[52];
InitCards(stCards);
Print(stCards);
system("pause");
return 0;
}
void InitCards(tagCard* cards)
{
for(E_SHAPE i = E_SPADE; i < E_MAX; i = (E_SHAPE)(i+1))
// enum 문이라 다르게 해야함 i++ -> i = i+1 -> i = (E_SHAPE)(i+1)
// enum문에 대한 증감은 강제 형 변환
// enum문 활용 : 유지보수, 수정시 실수가 줄어듬
{
for (int j = 1; j < 13; j++)
{
switch (i)
{
case E_SPADE:
cards[i * 13 + j].szShape = (char* )"♠" ; //문자열 상수값 -> 형변환
break;
case E_DIA:
cards[i * 13 + j].szShape = (char*)"◆";
break;
case E_HEART:
cards[i * 13 + j].szShape = (char*)"♥";
break;
case E_CLOVER:
cards[i * 13 + j].szShape = (char*)"♣";
break;
case E_MAX:
break;
}
cards[i * 13 + j].nNumber = j + 1;
}
}
}
void Suffle(tagCard* cards)
{
}
void Print(tagCard* cards)
{
for (int i = 0; i < 52; i++)
{
switch (cards[i].nNumber)
{
case 1:
cout << cards[i].szShape << "A" << " ";
break;
case 11:
cout << cards[i].szShape << "J" << " ";
break;
case 12:
cout << cards[i].szShape << "Q" << " ";
break;
case 13:
cout << cards[i].szShape << "K" << " ";
break;
default:
cout << cards[i].szShape << cards[i].nNumber<< " ";
break;
}
if (i % 13 == 12) // 0 ~ 12
cout << endl;
}
}
안녕하세요 게임클래스 프로그래밍 강사 하민우 입니다.
위에 올려주신 코드 중 InitCards 함수에서
for(E_SHAPE i = E_SPADE; i < E_MAX; i = (E_SHAPE)(i+1))
{
for (int j = 1; j < 13; j++)
위의 2중 포문에서 j가 1부터 시작 합니다. 그러면
cards[i * 13 + j]
위의 인덱스 번호 계산시 j가 1부터 시작함으로 i가 0인경우 인덱스 번호가 1이 됩니다.
결국 cards[0], cards[13], cards[26], cards[39] 이렇게 4개의 값은 설정이 되지 않고 있고 있는데 프린트 함수에서는 0부터 출력을 하기 때문에 할당되지 않은 메모리에 대한 접근으로 에러가 발생 하고 있는 것으로 확인 됩니다.
반복문의 j = 1을 j = 0 으로 수정 하시면 정상 작동 됩니다.
항상 열공하시고 공부하다가 또 막히는게 있을 때는 언제든지 질문 주시기 바랍니다.
게임 개발자가 되는 가장 빠른 길, 게임클래스!