언어 자료구조 알고리즘/디딤돌 C언어

[C언어] 85. realloc 함수

언제나휴일 2016. 4. 18. 07:50
반응형



realloc 함수


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

반응형