일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- template
- 총정리
- 알고리즘
- c++
- class_template
- singly Linked List
- data_structure
- function_template
- list
- Articulation_Point
- sstream
- red-black tree
- Critical_Path_Analysis
- Algorithm
- deletion
- STL
- Heap
- connected_component
- '0'
- 5397
- 문법
- 13305
- 자료구조
- qsort
- 예제
- 구현
- Pair
- Biconnected_Component
- sort
- 백준
- Today
- Total
- Today
- Total
- 방명록
어제의 나보다 성장한 오늘의 나
[c / c++] new / malloc / calloc /realloc 총 정리 & 예제 본문
예전에 c에서는 malloc을 사용하고 c++는 new를 사용한다고 배웠었는데, 왜 그럴까??
malloc과 new 는 모두 메모리를 할당하는 함수이다.
c에서는 malloc을 , c++ 에서는 malloc 과 new 모두 사용할 수 있다.
각각의 사용법과 상황에 맞는 사용법에 대해 정리해보았다.
헤더 파일
malloc / calloc / realloc : #include <stdlib.h>
new : 없음.
Malloc
//malloc
char * p_char;
p_char = (char*)malloc(sizeof(char)); // char 메모리 할당
free(p_char);
char * p_chararr;
p_chararr = (char*)malloc(sizeof(char) * 10); //char_array 메모리 할당
free(p_chararr);
메모리 할당 : malloc
메모리 해제 : free
Calloc
//calloc
char* p_char2;
p_char2 = (char*)calloc(sizeof(char));
free(p_char2);
char* p_chararr2;
p_chararr2 = (char*)calloc(10,sizeof(char));
free(p_chararr2);
메모리 할당 : calloc
메모리 해제 : free
※ malloc 과 calloc 의 차이점
둘 다 할당된 메모리 만큼 초기화가 진행되는데,
malloc의 경우 모두 쓰레기 값으로 , calloc의 경우 모두 0 으로 초기화가 진행 된다.
realloc
//realloc
realloc(p_chararr,sizeof(char) * 20); // 메모리 재 할당.
malloc을 통해 sizeof(char) * 10 메모리를 할당 받았던 포인터를
sizeof(char) * 20 으로 재할당 하였다.
new
//new
char* p_char2;
p_char2 = new char;
delete p_char2;
char* p_chararr2;
p_chararr2 = new char [10];
delete[] p_chararr2;
메모리 할당 : new
메모리 해제 : delete , delete[] (array의 경우)
new와 malloc의 차이점
① 재할당(realloc)
new는 재할당이 불가능 하기 때문에, 재할당 하고 싶으면 소멸 시키고 다시 할당 시켜야 한다.
malloc의 경우 realloc을 통해 재할당 가능하다.
② 생성자 , 소멸자 호출
new를 사용하면 생성자를 호출한다. 그리고 delete를 사용할때 소멸자를 호출한다.
malloc을 사용하면 생성자와 소멸자 호출이 없다.
코드로 알아보자
class Test{
public :
// 생성자
Test(){
cout << "Test constructor" << endl;
}
//소멸자
~Test(){
cout << "Test destructor" << endl;
}
};
cout << "malloc test" << endl;
Test* t2;
t2 = (Test*)malloc(sizeof(Test));
free (t2);
cout << "new test" <<endl;
Test* t;
t = new Test;
delete t;
'c++ > 문법' 카테고리의 다른 글
[c++] 이진 탐색 ( lower_bound , upper_bound ) 사용 및 예제 (0) | 2022.02.13 |
---|---|
[C++] Unique 함수 정리 및 예제 (0) | 2022.02.13 |
[c++] [자료형] int / double / char / float 크기 (0) | 2022.02.12 |
[C++] Sort 와 Compare 함수 (Greater , less) (0) | 2022.02.10 |
[C++] Pair 와 Tuple (0) | 2022.02.10 |