티스토리 뷰

※ 본 포스팅은 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.

○ realloc

realloc 함수는 기존에 malloc이나 cmalloc으로 동적 할당된 메모리 크기를 변경시켜주는 함수다. arr이라는 포인터에 동적 할당으로 메모리 공간을 할당해 주고 realloc으로 메모리 크기를 조정할 때 만약 arr이 있는 메모리 위치에 충분한 공간이 있다면 realloc함수는 추가로 메모리 공간을 할당해준다. 하지만 arr이 있는 메모리 위치에 충분한 공간이 없다면 메모리의 다른 공간 기존 크기의 공간을 할당 + 기존에 있던 데이터를 복사한 후 추가로 메모리를 할당해준다.

#include	//1. realloc 예제
#include
 
void main()
{
	int i, n, m;	//i:for문용 변수, n:arr배열의 처음크기, m:arr배열을 얼마나 증가시킬지
	int *arr;	//포인터 배열
	printf("몇개의 숫자 데이터를 입력하실건가요? : ");
	scanf("%d", &n);
	arr=(int *)malloc(n*sizeof(int));	//입력받은 n만큼 동적할당
	for(i=0; i<=n-1; i++)
	{
		scanf("%d",&arr[i]);
	}
	printf("입력된 데이터는 ");
	for(i=0; i<=n-1; i++)
	{
		printf("%d ",arr[i]);
	}
	printf("입니다\n");
	printf("추가로 몇개의 숫자 데이터를 입력하실건가요? : ");
	scanf("%d", &m);
	arr=(int *)realloc(arr, (m+n)*sizeof(int));	//입력받은 m만큼 추가로 동적할당
	for(i; i<=n+m-1; i++)
	{
		scanf("%d",&arr[i]);
	}
	printf("입력된 데이터는 ");
	for(i=0; i<=n+m-1; i++)
	{
		printf("%d ",arr[i]);
	}
	printf("입니다\n");


○ calloc

calloc 함수는 malloc과 유사하나 malloc은 할당과 동시에 초기화를 해주지 않는 반면 calloc NULL값으로 초기화를 해준다. 그리고 사용시 인자로 malloc (5*sizeof(int)) 처럼 할당할 전체 데이터의 크기가 들어가는 반면, calloc (5, sizeof(int)) 로써 첫 번째 인자로 몇 개를 할당할 것인지와 두 번째 인자로써 각 할당된 개수의 크기를 설정한다.

#include	//1. calloc 예제
#include
 
void main()
{
	int i, *mall, *call;
	mall=(int *)malloc(3 * sizeof(int));	//mall에는 malloc으로 동적할당
	call=(int *)calloc(3, sizeof(int));		//call에는 calloc으로 동적할당
	printf("malloc 사용시 : ");
	for(i=0; i<3; i++)
	{
		printf("%d ", mall[i]);
	}
	printf("\ncalloc 사용시 : ");
	for(i=0; i<3; i++)
	{
		printf("%d ", call[i]);
	}
	putchar('\n');	
}



프로필사진

Yowu (Yu Yongwoo)

흔한 백엔드 개발자입니다
우분투 데스크탑 개발 환경을 선호합니다
최근에는 vscode에 neovim 모드 올려서 쓰고 있습니다
개발용 키보드는 역시 해피해킹 프로2 무각입니다
락 밴드에서 드럼을 쳤습니다

«   2020/04   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
글 보관함
Total
2,714,768
Today
464
Yesterday
1,405