어제의 나보다 성장한 오늘의 나

[c / c++] new / malloc / calloc /realloc 총 정리 & 예제 본문

c++/문법

[c / c++] new / malloc / calloc /realloc 총 정리 & 예제

today_me 2022. 2. 12. 14:33
반응형

예전에 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의 경우 모두 으로 초기화가 진행 된다.

 

 

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;

 

출력 결과

반응형
Comments