아카이빙/C, C++

malloc, calloc, realloc, free

셩님 2018. 5. 26. 17:24

malloc, calloc, realloc, free


malloc

  • 메모리 블록을 할당

  • 동적할당으로 배열을 사용할 수 있다.

int* arr1 = (int*)malloc(sizeof(int) * 10);

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

free(arr1);


calloc

  • 메모리 블록을 할당하고 0으로 초기화

  • malloc과 같지만 0으로 초기화 되는 것 만 다름

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

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

free(arr2);


realloc

  • 메모리 블록을 재할당

  • 대게 동적할당한 메모리를 확장할 때 사용한다.

  • 재할당에 실패한 경우 NULL을 반환하며, 기존의 포인터에 덮어 쓰다가 실패하면 메모리 누수가 발생할 수 있으니 주의해야 함.

int* arr3 = (int*)malloc(sizeof(int) * 10);
for (int i = 0; i < 10; i++) {
   arr3[i] = i;
   printf("%d\n", arr3[i]);
}

int* arr4 = (int*)realloc(arr3, sizeof(int) * 20);
for (int i = 10; i < 20; i++) {
   arr4[i] = i;
}

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

free(arr4);


free

  • 할당한 메모리 공간을 해제

int* p = (int*)malloc(sizeof(int));
*p = 5;
printf("%d\n", *p);
// 5를 출력

free(p);
printf("%d\n", *p);
// 쓰레기값 출력

'아카이빙 > C, C++' 카테고리의 다른 글

strcpy와 strncpy  (0) 2018.05.27
string과 character 배열  (0) 2018.05.26
sizeof 포인터  (0) 2018.05.26
sizeof는 함수? 연산자?  (0) 2018.05.26
[C/C++] define, NULL, sizeof 헷갈리는 예시들  (0) 2018.05.24