강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

bum7124님의 프로필 이미지
bum7124

작성한 질문수

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

9.11 대입 연산자 오버로딩, 깊은 복사, 얕은 복사

함수에서 동적할당 관련 궁금합니다

작성

·

1.2K

1

안녕하세요?

함수내에서 변수를 선언하면  함수 호출이 종료될 때 변수에 대해 할당된 메모리가 반환되는것으로 알고 있습니다

다만 함수내에서 동적할당을 할 시에는 delete를 하지 않으면 메모리가 계속 유지가 되는데

이는 함수안의 변수가  stack에 저장이 되서 그렇고

동적할당을 할 시에는 heap에 저장이 되어 그렇다고 생각하면 될까요? 

퀴즈

66%나 틀려요. 한번 도전해보세요!

사용자 정의 타입에 대해 연산자 오버로딩을 하는 주된 목적은 무엇일까요?

코드 실행 속도를 빠르게 하기 위해

사용자 정의 타입을 내장 타입처럼 자연스럽게 사용하기 위해

객체의 메모리 관리를 자동화하기 위해

클래스의 상속 관계를 정의하기 위해

답변 1

3

안녕하세요 :)

네 맞습니다. 

그래서 만약 함수 안에서 "int * ptr = new int;" 이렇게 선언한다면 이것은 함수 내의 지역변수 포인터인 ptr 이 동적할당 받은 어떤 int 크기의 힙 메모리를 가리키게 됩니다. 즉, 힙 메모리의 주소값이 할당되어 있는 ptr 은 스택 메모리에 있고 그 ptr 이 가리키는 메모리는 스택이 아닌 힙에 있는 형태가 됩니다. 

이런 상태에서 함수가 종료된다면 지역 변수인 ptr 은 사라지되 ptr 이 주소값으로 가지고 있던 해당 주소의 힙 메모리는 종료되지 않습니다. 해당 힙 메모리의 주소를 가지고 있던 ptr 이 사라졌으니 이제 이 힙메모리에 접근할 방법은 영영 사라집니다. 분명 힙 메모리에 자리는 차지 하고 있는데 주소를 잃어버려서 찾지 못하게 되는 것입니다. 이런 현상을 메모리 누수라고 하는데 질문 주신 현상 때문에 생길 수 있는 이슈라고 할 수 있겟습니다. 

bum7124님의 프로필 이미지
bum7124

작성한 질문수

질문하기