void *realloc(void *base,size_t nsize);
C언어에서 동적으로 할당한 메모리는 free 함수를 이용하여 부분적으로 해제할 수 없어요.
대신 realloc 함수를 이용하여 할당한 메모리의 크기를 조절할 수 있어요.
첫 번째 입력 인자에는 이전에 동적으로 할당한 메모리 주소를 전달하세요.
두 번째 입력 인자에는 새로 할당할 메모리 크기를 전달해요.
realloc 함수를 이용하면 기존의 메모리의 내용은 유지하면서 메모리 크기를 변경할 수 있어요.
새롭게 늘어난 부분의 값은 쓰레기 값이예요.
그리고 realloc 함수를 호출할 때 첫 번째 입력 인자로 0을 전달해서 동적 메모리를 할당받을 수도 있어요.
대부분 realloc 함수를 사용할 때 동적으로 할당한 메모리를 기억할 포인터 변수를 첫 번째 입력 인자로 전달해서 사용해요.
그리고 realloc 함수가 반환한 메모리 주소를 해당 포인터 변수에 대입하죠.
int *base = 0;
int asize = 0;
int usage = 0;
void Resize()
{
if(asize ==
0)
{
asize = 1;
}
else
{
asize = asize * 2;
}
base = (int *)realloc(base,sizeof(int)*asize);
}
◈ realloc 함수를 이용하여 동적으로 할당한 메모리의 크기를 확장하는 예
#include <stdlib.h>
#include <stdio.h>
int *base = 0; //저장소의 위치 정보
int asize = 0; //현재 저장소의 용량
int usage = 0; //저장소에 보관한 요소 개수
void Input(int num); //저장소에 보관하기
void Resize();//저장소의 용량 변경하기
void View();//저장소의 정보 보기
int main()
{
Input(3);
View();
Input(5);
View();
Input(7);
View();
Input(9);
View();
return 0;
}
void Input(int num)
{
if(asize ==
usage)
{
Resize();
}
base[usage] = num;
usage++;
}
void Resize()
{
if(asize ==
0)
{
asize = 1;
}
else
{
asize = asize * 2;
}
base = (int *)realloc(base,sizeof(int)*asize);
}
void View()
{
int i = 0;
printf("저장 용량:%d 사용량:%d\n",asize, usage);
for(i=0;i<usage;i++)
{
printf("%d\n",base[i]);
}
}
◈실행 결과
저장 용량:1 사용량:1
3
저장 용량:2 사용량:2
3
5
저장 용량:4 사용량:3
3
5
7
저장 용량:4 사용량:4
3
5
7
9
'언어 자료구조 알고리즘 > 디딤돌 C언어' 카테고리의 다른 글
[C언어] 90. 동적 배열 소스 작성 (0) | 2016.04.18 |
---|---|
[C언어] 89. 동적 배열 헤더 작성 (0) | 2016.04.18 |
[C언어] 88. 사용자 정의 배열 개요 (0) | 2016.04.18 |
[C언어] 87. 동적 메모리 할당 정리하기 (0) | 2016.04.18 |
[C언어] 86. 학생 구조체 동적 메모리 할당 실습 (0) | 2016.04.18 |
[C언어] 84. calloc 함수 (0) | 2016.04.18 |
[C언어] 83. malloc 함수 (0) | 2016.04.18 |
[C언어] 82. 동적 메모리 할당 함수 (0) | 2016.04.18 |
[C언어] 81. 사용자 정의 형식 정리하기 (0) | 2016.04.17 |
[C언어] 80. 사용자 정의 형식 실습 - 테스트 (0) | 2016.04.17 |