inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

디버깅 문제 풀이 #3

디버깅 문제풀이#3 10번문제 질문있습니다

442

슝슝이

작성한 질문수 14

0

for (int i = 0; i < 10; i++)

{

arrows[i]->AttackTarget();

// 기사가 죽었으면 소멸시켜준다

if (knight != nullptr)

{

if (knight->IsDead())

{

delete knight;

knight = nullptr;

}

}

delete arrows[i];

arrows[i] = nullptr;

}

이부분에서 나이트를 delete 하고 nullptr 로 채우고나서

애로우 부분에

// 공격 대상이 있다면

if (_target != nullptr)

{

// 데미지를 입힌다

target->AddHp(-damage);

_target->PrintInfo();

}

_target을 nullptr 체크했는대 구문으로 왜 들어오는건가요..?

c++

답변 2

0

Rookiss

image
위 상황에서 시작하는데요.
delete를 하고 arrow[i] = null로 밀었을 때의 결과는 다음과 같습니다.
image

0

슝슝이

 

죄송합니다 제가 이해를 잘못한거같습니다

Knight* knight = new Knight();

Arrow* arrow = new Arrow(knight, archer->_attack);

arrows[i] = arrow;

//원본night 객체 삭제

delete knight;

//Knight*가 가리키고있는 주소 nullptr 로 민다.

knight = nullptr;

그럼 arrow[i]가 가지고있는 _target(knight) 포인터 는

arrow[i]안에서 _target을 nullptr로 채워주지않는 한

이미 밀려버린 knight의 원본객체주소 를 그대로 가리키고있게 되는건가요?

 

1

Rookiss

물론입니다.
그게 포인터와 C++ 의 어려운 부분이죠

0

Rookiss

질문이 살짝 모호한데요

if (_target != null) 안으로 들어온게 이해가 안 가시는건가요?

소스코드와 관련하여 질문드립니다

0

70

1

map 컨테이너의 emplace 함수에 대해

0

113

2

시작이 안되네요...!

0

97

2

EAX 명령어 실행 시 RAX의 상위 32비트가 초기화 되는 이유

0

126

1

리틀 엔디안 장점 질문합니다.

0

131

1

메모리 창에 주소를 넣었는데 영어 꺠짐

0

124

1

타입변환#2 build시 knight 인접 stack이 침범당했다는 error가 발생합니다.

0

94

2

map #1 8분 58초 맵은 레드블랙트리로 이루어진 것 같습니다.

1

138

2

hello world 부터 오류 ㅠㅜ

0

188

1

지역변수가 스택? 레지스터

0

132

2

마지막 문제 질문드립니다.

0

165

2

메모리창이 비활성화됩니다.

0

98

1

이중포인터 강좌 부분 질문있습니다.

0

145

1

2를 더하는 이유

0

133

1

메모리 주소 창 엔디안 질문 드립니다. 인프런 봇 답변도 괜찮습니다

1

111

1

해당 코드는 왜 오류가 날까요?

0

155

1

마지막 문제 질문 있습니다.

0

119

1

강의 마지막부분에 질문이 있습니다.

0

192

2

Field초기화

0

140

1

virtual과 override 차이

0

315

2

3:30 참조자 리턴

0

168

1

map 찾기

0

158

1

프로그램 질문드려요

0

260

1

캐스팅 질문

0

138

1