게임학원, 게임프로그래머 취업 전문 교육기관 DirectX11/12 자체엔진 게임개발과정,서버프로그래밍,자료구조,알고리즘,유니티,언리얼 게임학원, 언리얼학원 C++ 왕초보 강의 3강 : 메모리 관리 공포증(new & delete)
본문 바로가기

C++ 왕초보 강의 3강 : 메모리 관리 공포증(new & delete)

안녕하세요. 어소트락 게임아카데미입니다. 게임 개발의 근본이 되는 언어, 바로 C++!
수많은 프로그래밍 언어 중에서도 C++은 메모리 구조를 직접 다루는 언어로, 프로그램이 실제로 어떻게 동작하는지를 깊이 이해하는 데 필수적인 도구입니다.

오늘은 스택과 힙의 차이, 그리고 C++의 핵심 개념인 new와 delete의 원리까지 —
게임 개발자라면 꼭 알아야 할 메모리 관리의 기본기를 어소트락과 함께 하나씩 정리해보겠습니다.


C++위기극복 시리즈 1~2강 살펴보기

 

프로그래밍 언어 C++ 기초 1강 : for문 쉽게 배우기

왜 for문에서 막히는가? 1.for문의 기본 구조 for문은 아래와 같은 구조로 구성되어 있습니다. 2. 흐름도 ...

blog.naver.com

 

프로그래밍 언어 C++ 기초 2강 : 포인터의 늪 (주소와 값의 혼란)

1. Prologue 프로그래밍 언어에서 포인터가 난관이 되는 이유 먼저 , C++을 배우는 많은 초보자들이 이렇...

blog.naver.com


1. Prologue : 왜 메모리 관리에서 포기하는가?

C++을 배우다 보면 많은 초보자들이 다시 한 번 좌절하는 지점이 있습니다.
바로 동적 메모리 관리 (new / delete) 입니다.

Python이나 Java 등에서는 메모리 관리가 자동으로 이루어지지만, C++에서는 프로그래머가 직접 메모리를 할당하고 해제해야 합니다.그 과정에서 메모리 누수 (Memory leak), 세그멘테이션 폴트 (segmentation fault) 같은 에러가 발생하면 "아, C++은 너무 어렵다" 라는 생각이 들면서 포기를 고민하게 됩니다.

2. 스택(Stack)과 힙(Heap)의 차이

메모리 관리 이야기를 하기 전에
먼저 프로그램의 메모리 구조를 간단히 이해해야 합니다.

● 스택 (Stack)

• 지역변수, 함수 호출 시 자도응로 생성되는 공간
• 함수가 끝나면 자동으로 메모리가 해제됨

● 힙 (Heap)

• 프로그래머가 직접 할당하고 직접 해제해야 하는 공간
• new / delete 를 사용해야 관리 가능

핵심차이 : 스택은 자동관리, 힙은 수동관리
C++에서 실수는 대부분 힙 메모리 관리에서 발생합니다.


3. new와 delete의 기본원리

new 연산자

● 동적으로 메모리를 할당하고, 그 주소를 포인터로 반환

delete 연산자

● new로 할당한 메모리를 해제

규칙 : new에는 반드시 delete 가 따라와야 한다.


4. 메모리 누수 (Memory Leak)

메모리 누수란?
할당한 메모리를 해제하지 않아 메모리가 계속 차지되는 상황을 말합니다.

· 함수가 끝나도 p가 가리키던 메모리는 해제되지 않음
· 이 코드가 계속 반복되면 프로그램 메모리가 점점 늘어남
· 장시간 실행되는 게임/서버에서 치명적
ex) 게임을 너무 오래 켜두었더니 점점 느려지는 경우 → 대부분 메모리 누수 때문

5. 세그멘테이션 폴트 (segmentation fault)

세그멘테이션 폴트는 ?
허용되지 않은 메모리 공간을 잘못 접근했을 때 발생하는 런타임 충돌입니다.

또한 이미 해제한 메모리에 접근할 때도 발생합니다.

쉽게 말하면 "존재하지 않는 방에 억지로 들어가려는 것"과 같습니다.

6. 댕글링 포인터 (dangling pointer)

댕글링 포인터란?
이미 해제된 메모리를 여전히 가리키고 있는 포인터입니다.

· 해제된 메모리 공간은 다른 데이터로 덮일 수도 있고, 접근 시 충돌이 날 수도 있음.
· 결과는 예측 불가능(Undefined Behavior) → 프로그램 안정성 저하
해결방법 : delete 후에는 반드시 nullptr로 초기화

이렇게 하면 if(p != nullptr) 같은 안전 체크가 가능해집니다.


7. 예제: 배열 동적 할당과 해제

배열을 해제할 때는 반드시 delete[] 를 써야 합니다.


8. 비전공자가 하는 실수 정리

1) delete 빼먹음 → 메모리 누수
2) delete 두 번 → 세그멘테이션 폴트
3) delete / delete[] 혼동 → 비정상 종료
4) 해제 후 접근 → 댕글링 포인터



9. 극복전략

● 항상 new와 delete는 세트라고 기억하기.
● delete 후에는 nullptr 로 초기화
● 배열은 반드시 delete[] 로 해제하기.
●메모리 관련 버그는 Valgrind, Visual Studio 메모리 진단 같은 툴로 추적
●장기적으로 스마트 포인터 사용 습관화


10. 마무리 요약

스택은 자동관리, 힙은 수동관리
●메모리 누수 : 할당만 하고 해제는 안 함 → 점점 느려짐
●세그멘테이션 폴트 : 잘못된 메모리 접근 → 충돌
●댕글링 포인터 : 해제된 메모리 접근 → 예측 불가 동작

핵심 습관
- new / delete 반드시 쌍으로 사용
- delete 후에는 nullptr 처리


다음 편에서는 어떤 내용을 다뤄볼까요?



스마트 포인터로 가는 길

사실, 메모리를 직접 관리하는 것은 초보자에게는 큰 부담입니다.

· delete를 깜빡 하면 → 누수
· 잘못된 접근 → 세그폴트
· 해제 후 접근 → 댕글링 포인터

이런 문제를 줄여주는 현대 C++의 해법이 바로
스마트 포인터 (smart pointer)인데요.

다음 편에서는 4강 스마트 포인터의 구원투수(하지만 맹신은 금물)에서
스마트 포인터의 장점과 한계,
그리고 올바른 활용법을 함께 살펴보겠습니다.



저희 어소트락 게임 아카데미에서는
교육생들이 이런 난해한 개념에서 좌절하지 않도록,
프로그래밍 언어 기초부터 C++의
메모리 구조까지, 실습 중심으로 기초를 다져드립니다.

처음엔 어려워 보이지만, 함께라면 충분히 극복할 수 있습니다!

📺 더자세히 알고 싶다면?📺

어소트락 유튜브에서 ‘C/ C++’
프로그래밍 언어 강의를 확인해보세요!

총 85강의 체계적인 커리큘럼으로
기초부터 실무 응용 TIP을 얻어가실 수 있습니다.


더 깊이 있는
프로그래밍 언어를 배우고 싶다면 ?


※ 100% 전액무료 국비지원 과정 ※
언리얼엔진 개발자 양성 과정
모집기간 : 10월 27일

<수강신청 하러 가기>

자세한 교육과정 내용 보러가기

 

게임개발학원 무료교육(0원),언리얼엔진 독학보다 확실한 개강 찬스

“게임 개발, 어디서부터 시작해야 할까?” 강의를 찾아보고 언리얼엔진 독학을 시작했지만 몇 주 만에 포...

blog.naver.com


자체게임엔진제작 과정
30%할인코드 제공중 (온라인 과정)

 

30% 할인 혜택?어소트락 DirectX11기반 온라인 강의 과정

유데미 온라인 강의 DirectX11 기반 자체게임엔진제작 할인 링크 클릭 방법 (사이트 바로가기) ※각 파트...

blog.naver.com

▪ 어소트락 공식 홈페이지 바로가기