inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

다중 포인터

11분 SetMessage 질문

343

starkshn

작성한 질문수 134

0

main()

{

const char* msg = "Hello";

retrun 0;

}

Hello 라는 문자열이 수정이 불가능 한 이유로는

rodata영역에 들어가기 때문에 수정이 불가능하고 또한 

const가 *이전에 붙어있어서 주소로 접근하여 값을 수정하는 것이 불가능하다. (msg라는 포인터 변수의 데이터(가르키는 주소는 수정이 가능하다)

 

그리고 SetMessage함수에 msg의 주소(값을)를 const char* a로 넘겨주고

 

a = "Bye"; 로 선언 및 초기화를 해주었을 경우

 

a는 const char* a 즉, a가 가르키는 값(주소)의 값(데이터 == Hello라는 문자열)수정이 불가능 한 것이지

a라는 포인터 변수가 담고있는 값부분(주소값)을 수정하는 게 불가능 한 것이 아니다.

 

따라서 SetMessage 함수가 호출되면

 

a라는 포인터 변수에 처음에 

 

msg의 값에 담긴 "Hello"라는 문자열의 첫번째 주소값이 a에 담기기는 하지만,

 

a = "Bye"로 인해

 

데이터 영역에 있는 "Bye"의 첫번째 주소가 a라는 포인터 변수의 값에 할당된다.

 

그리고 a라는 포인터 변수는 스택메모리에 쌓인다.

 

SetMessage함수 호출이 종료되고 나면 a 포인터 변수 메모리 공간은 해제된다.

(함수 호출이 종료되면 사용할 수 없는 포인터 변수이다)

 

제가 이해한것이 맞나요??

 

(추가로 SetMessage 함수에서 데이터 영역에 Bye"라는 문자열을 데이터 영역에 메모리만 추가를 하고, a가 가르키는 값은 해제가 되니까 결론적으로는 데이터 영역의 메모리만 잡아먹고 아무것도 안한셈이 되는 것인가요?)

 

C++

답변 1

0

Rookiss

질문이 너무 깁니다...
그리고 [이해한 것이 맞는지] 확인하는 질문은 일일히 대답해드릴 수가 없습니다.

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

561

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

456

1

strcpy() 구현 관련 질문

0

542

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

477

1

클래스 타입의 포인터 질문합니다

0

560

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

504

1

템플릿 특수화 관련 질문

0

392

1

포인터 관련 질문합니다!

0

275

1

Unable to start assembler. Check your settings.

0

851

2

cpu선택

0

552

1

포인터 질문이 있습니다

0

334

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

592

1

iterator 삭제관련

0

419

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

319

0

스택 프레임 질문합니다!

2

316

1

오른값 참조 in 게임

0

394

0

동적할당 질문이 있습니다

0

460

1

안녕하세요 메모리에 대해 질문드립니다.

0

314

1

함수객체 의 매개변수

0

370

1

복사생성자

0

441

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

431

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

360

1

스택 오버플로우

2

804

1