본문 바로가기
c

19_동적할당2(Dynamic Allocation) - calloc

by RongBee 2023. 4. 30.

동적 할당의 개념은 malloc함수를 통해 공부했다.

 

이번엔  calloc함수에 대해 알아보자.

 

우선 calloc함수의 선언 방법은 이러하다.

 

 

calloc(siez_t Count, size_t Size);

 

 

 

size_t 자료형의 정의로 이동해 보면 #ifdef _WIN64(전처리기) 안에 typedef unsigned __int64이라고 나와있다.

 

#ifdef _WIN64이 키워드를 보면 운영체제 윈도 64비트일 때 실행된다.

 

이 자료형은 부호가 없는 64비트 정수의 형태이다.

 

매개변수 size_t Count는 메모리를 할당할 요소의 수이고,

 

size _t Size는 각 요소들의 크기(바이트)이다.

 

 

 

이제 10개의 정수 배열에 메모리를 calloc키워드를 사용하여 할당해 보자.

 

int *p;
p = (int*)calloc(10, sizeof(int));

 

 

이렇게 하면 malloc의 경우 공간 할당 후 해제를 해주지 않았기 때문에 쓰레기 값이 들어간 걸 볼 수 있었다.

 

하지만 calloc의 경우 초기화하지 않아도 0으로 알아서 초기화가 된다.

 

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

int main()
{
	printf("calloc                     malloc\n");

	int* mArray = (int*)malloc(5 * sizeof(int));
	int* cArray = (int*)calloc(5, sizeof(int));

	printf("초기화하지 않을 경우\n");

	for (int i = 0; i < 5; ++i)
	{
		printf("%d                        %d\n", cArray[i], mArray[i]);
	}

	free(cArray);
	free(mArray);

	cArray = NULL;
	mArray = NULL;

	return 0;
}

 

위의 코드 컴파일 결과

 

 

 

malloc과의 차이점

 

 

  • calloc은 매개변수가 두개이다.
  • malloc은 할당한 공간을 초기화하지 않는다면 쓰레기 값을 반환하지만, calloc은 초기화하지 않아도 0으로 초기화가 된다.

'c' 카테고리의 다른 글

18_동적할당1(Dynamic Allocation) - malloc  (0) 2023.04.26
17_정적변수(static)  (2) 2023.04.23
16_지역, 전역변수(Local, Global Variable)  (0) 2023.04.20
15_포인터(Pointer)  (0) 2023.04.17
14_함수(Function)  (0) 2023.04.14

댓글