반응형
malloc
메모리 블록은 할당합니다.
void *malloc( size_t size ); |
malloc은 실행시간 동안 메모리를 동적으로 할당받습니다.
할당 공간에 대한 void 포인터를 반환하거나 사용 가능한 메모리가 부족한 경우는 NULL을 반환합니다.
void가 아닌 형식에 대한 포인터를 반환하려면 형식 변환을 사용해야 합니다.
malloc, calloc, realloc, free 함수를 사용해기 위해서는 다음의 헤더파일을 포함해야 합니다.
#include <stdlib.h> 또는 #include <malloc.h> |
다음 코드는 정수를 입력받고, 입력 받은 수 만큼 int 크기의 메모리를 할당 받는 예제입니다.
#define _CRT_SECURE_NO_WARNINGS // Visual Studio
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
scanf("%d", &n);
int* ptr = (int*)malloc(sizeof(int));
for (int i = 0; i < n; i++)
ptr[i] = i + 1;
for (int i = 0; i < n; i++)
printf("%d ", ptr[i]);
printf("\n");
free(ptr); // 동적 메모리 해방
return 0;
}
(Output)
calloc
0으로 초기화된 요소(element)가 있는 메모리를 할당 받습니다.
void *calloc( size_t number, size_t size ); |
number: 요소(element)의 수
size: 각 요소의 길이(바이트)
위에서 작성한 코드를 calloc로 변경해 보겠습니다.
#define _CRT_SECURE_NO_WARNINGS // Visual Studio
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
scanf("%d", &n);
//int* ptr = (int*)malloc(sizeof(int)); // malloc
int* ptr = calloc(n, sizeof(int)); // calloc
for (int i = 0; i < n; i++)
ptr[i] = i + 1;
for (int i = 0; i < n; i++)
printf("%d ", ptr[i]);
printf("\n");
free(ptr); // 동적 메모리 해방
return 0;
}
(Output)
출력 결과는 malloc 예제와 동일합니다.
realloc
메모리 블록을 다시 할당합니다.
void *realloc( void *memblock, size_t size ); |
memblock: 이전에 할당된 메모리 블록에 대한 포인터
size: 새 크기(바이트)
할당된 새 블록은 다른 위치에 할당될 수 있습니다.
realloc 함수는 크기가 증가해도 이전에 할당됨 메모리를 비우지는 않습니다(이전 값을 유지합니다.)
위에서 작성한 코드를 realloc 함수를 사용해서 다시 수정해 보겠습니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
scanf("%d", &n);
//int* ptr = (int*)malloc(sizeof(int));
int* ptr = calloc(n, sizeof(int));
for (int i = 0; i < n; i++)
ptr[i] = i + 1;
ptr = realloc(ptr, sizeof(int)*n * 2); // -------------- 이전보다 2배 크기로 재할당
for (int i = n; i < n*2; i++) // 새로 할당받은 공간에만 값 설정
ptr[i] = i+1;
for (int i = 0; i < n*2; i++)
printf("%d ", ptr[i]);
printf("\n");
free(ptr); // 동적 메모리 해방
return 0;
}
(Output)
free
할당된 메모리 블록을 해제합니다.
void free( void *memblock ); |
memblock: 이전에 할당된 메모리 블록
free 함수는 calloc, malloc, realloc으로 할당된 메모리 블록의 할당을 해제합니다.
반응형
'C_C++' 카테고리의 다른 글
(C/C++) 소수인지 판단 is_prime_ number (0) | 2022.10.21 |
---|---|
(C언어) 피보나치 수열 (0) | 2022.10.20 |
(C/C++) 1부터 1000까지의 합, 100항마다 합을 출력하기 (0) | 2022.10.19 |
(C언어) 1부터 100까지의 합, 짝수의 합, 홀수의 합 구하기 (0) | 2022.10.19 |
(C언어) 콘솔 프로그램, 텍스트 색상 변경 (0) | 2022.10.14 |