(C언어) 동적할당 malloc calloc realloc 차이 및 설명

2021. 11. 16. 19:13·C언어/개념 및 정리
반응형

C언어에서 동적 할당을 사용하는 이유는 간단하다

시간을 단축하기 위해 사용하는 것이다.

 

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    scanf("%d", &num);
    int card[num] = { 0, };
    return 0;
}
cs

이렇게 num이란 숫자를 입력받았을 때 크기가 num인 배열을 만들고 싶다.

하지만 c언어에서는 이러한 배열 선언이 안돼서, 항상 입력할 수 있는 최댓값을 배열의 크기로 정하긴 했다.

그렇게 되면 입력한 값이 작아도 시간은 오래 걸리게 되는 일이 발생했다.

1. malloc

 

출처 Development Assemble Tistory

 

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    scanf("%d", &num);
    int *card = (int*)malloc(sizeof(int)*num);
    return 0;
}
Colored by Color Scripter
cs

int가 아닌 다른 자료형도 가능하다.

그림에서는 괄호 안에 sizeof(int)밖에 없지만, (sizeof(int)*숫자)를 해야 원하는 크기의 영역을 할당받을 수 있다.

malloc은 할당을 받으면 그 안에 쓰레기 값이 들어가 있다.

 

2. calloc

출처 GeeksforGeeks사이트

 

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    scanf("%d", &num);
    int *card = (int*)calloc(num, sizeof(int));
    return 0;
}
Colored by Color Scripter
cs

 

calloc은 malloc과 거의 비슷하지만 calloc은 (변수 , 자료형의 크기) 이렇게 선언을 해야한다.

ex) (num, sizeof(int)) -> num의 크기 * 4byte만큼의 크기를 할당받았다.

그리고 calloc은 할당을 하게 되면, 그 안에 0이 들어가 있다.

 

3. realloc

 

출처 GeeksforGeeks 사이트

realloc은 할당받은 크기를 재조정받는다고 생각하면 쉽다.

 

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    scanf("%d", &num);
    int *card = (int*)calloc(num, sizeof(int));
    card = realloc(card, 100 * sizeof(int));
    return 0;
}
Colored by Color Scripter
cs

위에 코드에서는 num*4 bytes의 크기만큼 크기를 할당받았었는데,

realloc 함수를 이용해 크기를 100*4 bytes으로 재조정했다.

 

4. free

항상 배열을 할당받으면 맨 끝부분에 free(pointer)을 해줘야 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int num;
    scanf("%d", &num);
    int *card = (int*)calloc(num, sizeof(int));
    for (int a = 0; a < num; a++)
    {
        printf("%d\n", card[a]);
    }
    free(card);
    return 0;
}
Colored by Color Scripter
cs

 

반응형
'C언어/개념 및 정리' 카테고리의 다른 글
  • C언어 스택 <자료구조> (C언어 C11 C99)
  • C언어 구조체 정리 (C언어 C11 C99)
  • C언어 선택정렬 정리 (C언어 C11 C99)
  • (C언어) 문자열 함수의 모든 것
코딩하는_대학생
코딩하는_대학생
Java Developer, Open Source Enthusiast, Proud Son
  • 코딩하는_대학생
    코딩하는 대학생에서 개발자까지
    코딩하는_대학생
  • 전체
    오늘
    어제
    • 분류 전체보기 (218)
      • 코딩하는 대학생의 책 추천 (8)
        • 클린코드 (5)
        • 헤드퍼스트 디자인패턴 (3)
      • Backend (8)
        • Spring (14)
        • AWS (3)
        • 회고 (4)
        • Redis (5)
        • 다양한 시각에서 바라본 백엔드 (3)
      • Python (35)
        • 개념 및 정리 (15)
        • 백준 문제풀이 (20)
      • JAVA (17)
        • 개념 및 정리 (14)
        • 백준 문제풀이 (2)
      • 왜? (7)
      • C언어 (42)
        • 개념 및 정리 (9)
        • 백준 문제풀이 (32)
      • 개인 공부 (27)
        • 대학 수학 (5)
        • 대학 영어 (10)
        • 시계열데이터 처리 및 분석 (5)
        • 컴퓨터 네트워크 (6)
        • 운영체제 (1)
      • 솔직 리뷰 (23)
        • 꿀팁 (6)
        • IT기기 (1)
        • 국내 여행 (7)
        • 맛집 (2)
        • 알바 리뷰 (2)
      • 대외활동 (17)
        • 체리피우미 3기 (4)
        • 꿀잠이들 6기 (13)
      • 음식 평가 (1)
      • 일상 & 근황 (2)
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩하는_대학생
(C언어) 동적할당 malloc calloc realloc 차이 및 설명
상단으로

티스토리툴바