동적 할당의 개념은 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 |
댓글