ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C언어 realloc()
    Visual Studio/C 기초 2013. 9. 11. 16:23

    realloc() 함수는 malloc()이나 calloc() 함수를 통해서 이전에 할당된 메모리 블록의 크기를 변경하는 함수입니다.

     

    void *realloc(void *ptr, size_t size); 

    인수 ptr은 원래의 메모리 블록을 가리키고, 변경하기 원하는 새로운 메모리 블록의 크기는 바이트 단위로 size에 의해서 지정됩니다. realloc()의 진행 과정입니다.

    1. ptr이 가리키는 메모리 블록을 확장하기에 충분한 메모리 영역이 존재한다면 함수는 추가로 메모리를 할당하고 ptr을 돌려줍니다.

    2. 현재 위치에서 메모리 블록을 확장하기에 충분한 메모리 영역이 존재하지 않는다면 size만큼의 크기를 가지는 새로운 블록이 할당되고 이전의 메모리 블록에 있던 현재의 데이터는 새로운 블록의 시작 부분으로 복사됩니다. 이전의 메모리 블록은 해제되고 함수는 새로운 메모리 블록에 대한 포인터를 돌려줍니다.

    3. 인수 ptr이 NULL값을 가지면 함수는 malloc()과 동일한 방법으로 사용됩니다. size에 지정된 바이트 만큼의 메모리 블록을 할당하고 메모리 블록에 대한 포인터를 돌려줍니다.

    4. 인수 size가 0이라면 ptr이 가리키는 메모리가 해제되고 함수는 NULL값을 돌려줍니다.

    5. 이전의 메모리 블록을 확장하거나 새로운 메모리 블록을 할다하는 메모리 재할당을 수행하기 위해 충분한 메모리가 존재하지 않는다면 함수는 NULL값을 돌려주고 원래의 메모리 블록을 변경하지 않습니다.

    예제를 보겠습니다.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    main()
    {
     char buf[80], *message;

     printf("한줄의 텍스트를 입력하세요 : ");
     gets(buf);

     message = realloc(NULL, strlen(buf)+1); // 초기 블록을 할당하고 문자열을 블록으로 복사합니다.
     strcpy(message, buf);

     puts(message);

     printf("또 다른 한줄의 텍스트를 입력하세요 : ");
     gets(buf);

     message = realloc(message, (strlen(message)+strlen(buf)+1)); // 할당을 증가시키고 나서
     strcat(message, buf);                                                           // 문자열을 결합합니다.

     puts(message);
     free(message);

     

     

    'Visual Studio > C 기초' 카테고리의 다른 글

    C언어 memset(), memcpy(), memmove()  (0) 2013.09.13
    C언어 free()  (0) 2013.09.13
    C언어 calloc()  (0) 2013.09.10
    C언어 malloc()  (0) 2013.09.06
    C언어 qsort(), bsearch()  (0) 2013.09.01

    댓글

Designed by Tistory.