티스토리 뷰
반응형
※ 본 포스팅은 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.
○ 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'); }
반응형
'개인공부 > C and C++' 카테고리의 다른 글
fseek와 ftell 함수 (0) | 2014.01.17 |
---|---|
구조체 파일 위치 지시자 (0) | 2014.01.17 |
struct member alignment(구조체 멤버 정렬)에 대해 (0) | 2014.01.16 |
strlen, strcmp, strcat, strcpy, strrev, strtok, atoi, itoa 설명 및 함수로 구현 (0) | 2014.01.16 |
Call by value와 Call by reference에 대해 (5) | 2014.01.16 |
컴파일러(Complier), 링커(Linker)에 대해 (1) | 2014.01.16 |
오버플로우(overflow)시 전혀 다른 값이 나오는 이유 (2) | 2014.01.16 |