inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

홍정모의 따라하며 배우는 C++

동적할당의 메모리에 관해 질문이 있습니다

231

yahang2008

작성한 질문수 1

0

안녕하세요. 동적할당을 배우기 시작한 프로그래밍 입문자입니다.

동적할당에 관해 궁금한 점이 있어서 질문드리게 됐습니다.

 

int main()

{

                {

                          int a = 5;

                }

       a = 7; (오류)

      return 0;

}

위의 코드에서 a는 스택메모리에 저장되어 있습니다. 스택은 괄호를 빠져나가는 순간 메모리가 소멸하기에

뒤에 a 값을 할당하려는 것(a=7)은 오류가 되잖아요. 

근데 동적할당의 경우 스택이 아니라 힙에 저장되며, 무엇보다 괄호를 빠져나가는 순간 메모리가 소멸하는 것이 아닌 delete를 해줘야 메모리가 다시 os에 반환되는 거잖아요.

반대로 delete하기전엔 메모리가 소멸이 안 된다는 거잖아요

따라서 위의 상황처럼 스택의 상황과 전혀 다르기에 비슷한 상황을 만들어봤습니다.

 

int main()

{

                {

                       int* b = new int {5};

                }

       *b = 7;  (오류)

        return 0;

}

b는 힙에 저장되어 있고 delete를 하지 않는 한 메모리가 사라지지 않으니 return 위에 있는 b에 값을 할당하는 내용이 오류가 아닐 줄 알았는데 오류라고 뜨네요.

왜 오류가 뜨는지 알고 싶습니다!

C++

답변 1

1

강민철

안녕하세요 :)

해당 변수에 접근 가능한 영역, 즉 접근 가능한 scope를 고려하셔야 합니다.

힙 영역에 저장되었다고 해서 모든 코드 영역에서 접근이 가능한 것은 아닙니다.

현재 변수에 접근 가능한 scope에 있느냐는 엄밀히 말하자면 별개의 문제입니다.

(스마트 포인터를 학습하셨는지 모르겠으나,)

스마트 포인터가 아닌 다음에야 new로 할당받은 변수는

동일한 scope에서 접근하고, 동일한 scope에서 delete을 해주셔야 합니다.

그렇지 않다면 말씀하신 대로 지속적으로 힙 영역의 메모리만 잡아먹게 되고,

메모리 누수가 발생하기 때문이지요.

감사합니다.

0

yahang2008

메모리가 저장되어있는 것과 코드에서 접근 가능한 것은 다른 문제라는 것이군요. 감사합니다!

변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠

1

483

1

메모리 주소 10진수로 출력

1

674

1

클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.

1

520

1

여러가지 리턴 타입에 관한 강의가 어떤 걸까요?

1

550

1

메모리 주소에 관한 질분

0

690

1

인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.

0

558

1

형변환 오버로딩에서 const 관련 질문이 있습니다.

0

451

1

Digit 뒤에 reference를 사용하는 이유

0

517

1

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

0

332

1

dat파일이...

0

544

1

TODO:대입 연산자 오버로딩에 대한 소스코드입니다.

0

654

1

복사 생성자 관련 질문이 있습니다.

0

460

1

수업 중 궁금한점이 있습니다.

1

396

1

라이브러리자체가 이해가 되지 않습니다.

0

572

1

마지막 예제 질문

0

308

1

증감연산자 위치에 따른 수행 순서 질문입니다.

0

384

1

단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.

1

423

1

friend함수 관련 질문이 있습니다.

0

317

1

operator+ 정의부분에서 궁금한 것이 있습니다.

0

454

1

3분 17초 질문

0

358

1

함수에 값을 대입한다는 개념이 이해가 되지 않습니다.

0

454

1

int getvalue() const에서 const는 왜 뒤에 붙는건가요?

0

458

2

const Something &st에서 const를 빼면 안되나요?

0

307

1

friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??

1

499

1