본문 바로가기

C++

[C++] malloc,calloc,realloc

void *malloc(size_t size );

 

malloc 함수는 size만큼의 메모리를 힙 영역에 할당하고 할당한 메모리의 첫 번지를 void 포인터로 반환한다. 

 

   int *arScore;
   int stNum;

     printf("학생수를 입력하세요 : ");
     scanf("%d",&stNum);
     arScore=(int *)malloc(stNum*sizeof(int));

     if (arScore == NULL) {
          printf("메모리가 부족합니다.\n");
          exit(0);
     }

 

할당은 정수형 포인터에 malloc으로 얻은 void형 포인터를 대입하는 것으로 이루어지기 때문에

해당 포인터의 자료형대로 캐스팅을 해줘야 한다. 할당할 메모리가 부족해서 할당에 실패하면 NULL을 반환한다.

 

 

void free(void *memblock );

 

할당하고 사용 후에는 메모리를 다른 용도로 사용할 수 있게 해제 해야 한다.

매개변수로 해제할 메모리의 시작 번지를 입력하면 된다.

 

 

void *calloc( size_t num, size_t size );

 

calloc은 size만큼의 메모리를 num개만큼 할당받을 수 있다. 결과적으로 size*num만큼의 메모리를 

할당하므로 두 매개변수의 순서가 바뀌어도 상관없다. 할당 후에 쓰레기 값으로 채워져있는 메모리가 0으로 초기화된다.

 

 

void *realloc( void *memblock, size_t size );

 

재할당할 메모리 시작 번지와 size를 지정하면 이미 할당되어있던 메모리의 크기를 변경할 수 있다.

memblock이 NULL이라면 malloc과 기능이 같아지고 size가 NULL이라면 free와 기능이 같아진다. 

 

 

size_t  _msize(void *memblock);

 

위 함수로 실행중에 memblock에 할당된 메모리의 크기를 알 수 있다.