프로그래밍 공부
작성일
2023. 4. 14. 15:58
작성자
WDmil
728x90

C와 C++의 메모리 동적할당을 알아보자.

C에서 사용하는 메모리 동적할당은 다음과 같다.

malloc을 사용한 방식.

C언어에서는 malloc 과 calloc 그리고 realloc 을 사용하고, free를 통해서 동적할당된 변수를 날려줄 수 있다.

그러나 C언어에서의 동적할당은 free이후 메모리의 주소값이 들어있는 포인터를 NULL로 초기화 해주어야 했다.


C++에서의 동적할당을 살펴보자.

C++에서는 동적할당 시 C와 다르게 생성할 조건을 형변환 하지 않아도 자동으로 형변환 해주는 시스템을 가지고 있다. 다음을 살펴보자.

delete 문을 사용하여 동적할당 된 포인터 변수를 초기화 해줄수 있고 따로 포인터변수를 NULL로 초기화 하지 않아도 된다.

그 외에도 해당되는 사이즈를 직접 초기화 해줄 수도 있다.


new로 생성되는 동적배열을 2차원배열 처럼 사용해줄 수 도 있다.

int** ptrArr 로 new int*[5]를 생성하여. 5칸을 가진 한줄을 만들고.

각 칸마다 10개의 int칸을 동적배열로 생성하면. 5x10 2차원배열을 만들어서 사용할 수 있다.

 

그러나, 지울때 에는 역순으로. for문을 사용하여 53 - 54 줄 처럼 입력하여 지워주어야 한다.

 

그 후. 생성한 행 포인터를 delete 해야 완전하게 지워줄 수 있다.


malloc은 구조체에서 pod(plain old data 연속된 메모리) 타입을 인자로 받아와서 쓸 수 있다.

그러나, string, 함수 같은것은 pod타입이라서 malloc에서 사용할 수 없다.

 

new에서는 허용된다. 객체타입에 대한 동적 메모리할당을 지원하기 때문에, new는 객체 생성자를 호출하여 객체 탕비에 따라 필요한 메모리공간 을 자동으로 할당하고 객체 초기화를 수행한다.

 

또한, new는 malloc과 다르게. 생성과 동시에 할당된 메모리를 초기화해준다. malloc은 수동으로 초기화 해주어야 한다.

728x90