본문 바로가기

C

[C언어] 동적 메모리 할당 (malloc, calloc)

반응형

동적 메모리는 메모리의 낭비를 방지하기 위해 할당하여 사용한다.

 - c: malloc(), calloc(), free()

 - c++: new, delete

 - java: new


malloc() 함수는 메모리 공간을 할당하면 그 공간에 쓰레기 값이 들어가 있다. 또한 메모리를 할당할 수 없는 경우 'NULL'을 반환한다. 반면, calloc() 함수는 메모리 공간을 할당하면 그 공간이 0으로 초기화된다.

 

#include<stdio.h>
#include<stdlib.h>   // 동적할당 함수를 내장하고 있다.
                     // malloc(), calloc()

int main(){

   int *pi;
   double *pd;

   pi = (int*)malloc(3*sizeof(int));           // int형 타입 3개 담을 공간을 할당한다.
   pd = (double*)calloc(5, sizeof(double));    // double형 타입으로 5개 담을 공간을 할당한다.

   *pi = 10;
   *pd = 3.14;

   for(int i = 0; i < 3; i++)
      printf("%d\n", pi[i]);

   for(int i = 0; i < 5; i++)
      printf("%lf\n", pd[i]);

   free(pi);   // 동적할당된 공간을 해제한다.
   free(pd);

   return 0;
}

 


메모리의 동적할당은 많은 기억 공간을 한꺼번에 할당받은 후 배열로 사용하는 것이 효율적이다.

 

#include<stdio.h>
#include<stdlib.h>

int main(){

   int arr[5] = {0};   // arr[] 배열을 '0'으로 초기화 해준다.
   int *pi;
   int sum = 0;

   pi = (int*)malloc(5 * sizeof(int));   // malloc() 함수에 동적 할당이 필요한 저장공간의 크기를 지정해 준다.
                                         // int type의 데이터 5개를 저장할 수 있다.

   if(pi == 0){   // malloc() : 메모리를 할당할 수 없으면 NULL을 반환한다.
      printf("메모리가 할당되지 않았습니다. 메모리가 부족합니다.\n");
      return 0;
   }

   for(int i = 0; i < 5; i++){
      printf("data = ");
      scanf("%d", pi + i);   // scanf("%d", &pi[i]);와 같다.
      sum += pi[i];
   }

   printf("평균 : %lf\n", sum / 5.);   // double형을 출력하기 때문에, (int)sum / (double)5.으로 해준다.

   free(pi);   // 동적 할당 받은 메모리를 해제한다.

   return 0;
}

 

반응형

'C' 카테고리의 다른 글

[C언어] 문자열과 배열  (0) 2021.05.02
[C언어] 실습: 문자열 처리하기(동적 할당)  (0) 2021.05.01
[C언어] 이중 포인터  (0) 2021.04.28
[C언어] const  (0) 2021.04.27
[C언어] 이차원 배열  (0) 2021.04.26