일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MST
- 외판원 순회
- 성화봉송주자
- 성화봉송
- 비트마스크
- 위상정렬
- 다음 지도 api
- 다음 API
- upper_bound
- 다이나믹 프로그래밍
- 캘리그라피
- DP
- BOJ 2098
- multiset
- 삼성 코딩테스트
- 영어회화 100일의 기적
- 안드로이드 스튜디오
- 언어의 온도
- 평창동계올림픽
- 그리디 알고리즘
- BFS
- yolo
- Segment Tree
- 생활코딩
- lower_bound
- 인간이 그리는 무늬
- 백트레킹
- 창훈쓰다
- boj
- 이분탐색
- Today
- Total
Hoon222y
16장. 동적 메모리 할당 본문
동적 메모리란 무엇이고 동적 메모리를 사용하는 이유는 무엇일까?
일단 동적메모리란 동적으로 메모리를 할당(Allocation)한다는 말이다. 정적 메모리 할당과 차이가 있다면
1) 메모리 크기를 프로그램이 실행하기전에 결정하는지, 프로그램을 실행하는 도중에 결정하는지
2) 메모리를 할당하고 해제하는 시점이 자유로운지 이다.
그리고 동적 메모리의 특징은 동적메모리 할당으로 할당한 메모리는 사용자가 직접 해제해주기 전까지는 절대로 컴퓨터에 의해 해제되는 일이 없다는 것이다.
그럼 지금부터 동적 메모리 할당하는 방법에 대해 알아보자.
입력한 갯수만큼의 수를 합해주는 간단한 코드이다. 여기서 볼 부분은
int* arr= new int[size] 와 delete [] arr 이 부분이다.
int* arr = new int[size] 라는 코드는 풀어서 해석해보면 int* 타입의 arr라는 변수를 만드는데 int타입의 size 개수만큼 저장할 수 있는 메모리 공간을 할당해달라는 말이다.
int*로 사용한 이유는 배열로 받기때문에 배열 처음값을 주소로 넣은것으로 볼 수 있을것이다. (이부분은 내생각.. 헤헤 아니면 수정함.)
또한 delete[] arr 는 arr로 할당받은 메모리를 해제한다는 뜻이다.
다음으로는 동적 메모리 할당에 관련된 기본적인 규칙이다.
1) new,delete 와 new[],delete[] 는 짝을 이루어서 사용해야한다. (당연한 것처럼 들린다.)
2) NULL 포인터를 해제하는 것이 안전하다.
ex) delete[] p; p = NULL;
3) 해제한 메모리를 또 해제해서는 안 된다.
아까 동적으로 할당한 메모리는 함수가 종료되더라도 계속존재한다는 말이 저 위에 코드이다.
그렇다고 해서 다시 해제를 해주면 문제가 된다.(주석처리한 부분)
문제없이 사용하기 위해서는 delete[] p; 뒤에 p = NULL; 을 해주는 습관을 기르는 것이 좋다.
관련된 내용은 추가적으로 포스팅 할 예정이고, 다음번에는 문자열에 대해 배우도록 하겠다. 뿅 !!
'코딩 > 뇌자극C++' 카테고리의 다른 글
20장. 객체지향 프로그래밍 (0) | 2016.02.11 |
---|---|
18장. 헤더파일과 구현파일 (0) | 2016.02.11 |
17장. 문자열(Strings) (2) (0) | 2016.02.11 |
17장. 문자열(Strings) (1) (0) | 2016.02.11 |