malloc
int* p;
p = (int*)malloc(sizeof(int) * 2);
p[0] = int(0);
p[1] = int(1);
cout << p[0] << "\n" << p[1];
p = (int*)realloc(p, sizeof(int) * 3);
p[2] = 2;
cout << p[0] << " " << p[1] << " " << p[2] << "\n";
free(p);
- 재할당 받은 뒤에 기존에 할당받았던 값 이외에 값인 3번째에만 값을 넣어준다.
- 재할당 받은 뒤에도 기존에 값은 정상적으로 존재하는 것을 확인할 수 있다.
- 단순히 메모리 사이즈만 변경하는 것이 아닌 내용물도 복사를 한다.
- 사이즈를 줄이면 기존에 할당받았던 값은 없어진다.
new
int* p2;
p2 = new int[2];
p2[0] = 0;
p2[1] = 1;
cout << p2[0] << " " << p2[1] << "\n";
delete[] p2;
p2 = new int[2];
cout << p2[0] << " " << p2[1] << "\n";
- 할당된 후에 재할당할 때는 꼭 삭제 후 할당을 해야한다. 그렇게하지않으면 메모리가 누수된다.
차이점
- malloc은 메모리를 동적으로 할당하는 것만이 목적이므로 초기값을 지정해 줄 수 없지만, new의 경우는 할당과 동시에 초기화가 가능하다.
- new 키워드는 생성자를 자동으로 호출하게 된다. 생성자는 객체를 자동으로 초기화 해주는 함수로, malloc과 new의 가장 큰 차이점이다.
- 객체가 아니고, 재할당이 빈번하게 일어나야된다면, malloc과 free가 오히려 더 좋은 선택이 될 수도 있다.
C++] malloc 과 new의 차이!
#delete #malloc #new #free 공통점으로는 서로 heap영역에 메모리를 잡아주는 역할을 한다. 즉, 동적할당...
blog.naver.com
https://boycoding.tistory.com/204
C++ 07.12 - new와 delete를 사용한 동적 메모리 할당 (Dynamic memory allocation with new and delete)
new와 delete를 사용한 동적 메모리 할당 (Dynamic memory allocation with new and delete) 동적 메모리(dynamic memory) 할당이 필요하다. C++은 세 가지 기본 타입의 메모리 할당을 지원한다. 이 중 두 가지는..
boycoding.tistory.com
'C++ > Basic' 카테고리의 다른 글
함수 오버로딩 (0) | 2021.09.17 |
---|---|
vector와 list의 차이점 (0) | 2021.09.16 |
[C++] 가변인자 템플릿 (0) | 2021.08.25 |
[C++] 람다 (0) | 2021.08.24 |
[C++] fstream으로 입력 출력 (0) | 2021.08.19 |