본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/프로그래밍
  3. C언어 realloc 함수 동적 메모리 크기 변경

C언어 realloc 함수 동적 메모리 크기 변경

· 댓글개 · 바다야크

C realloc() 동적 메모리의 크기를 변경 함수

malloc()이나 calloc()에서 할당받은 메모리의 크기를 변경합니다. 또한 변경하려는 메모리 영역의 값을 유지하면서 크기를 수정합니다.

  • 헤더: stdlib.h
  • 형태: void *realloc(void *ptr, size_t size)
  • 인수: void *ptr 메모리의 크기를 변경할 포인터
    size_t size 새로 지정할 메모리의 크기
  • 반환: void * 메모리의 크기가 변경된 메모리의 주소

주의)

새로 변경할 메모리의 크기가 변경하기 어려운 경우에는 아래와 같이 새로 메모리가 할당되므로, 이전 포인터 값을 계속 사용하는 것은 위험합니다.

  1. 새로 지정한 메모리 양으로 메모리를 할당받고,
  2. 이전 메모리의 내용을 복사한 후,
  3. 이전에 할당받은 메모리를 반환합니다.
  4. 그리고 새로 할당받은 메모리를 반환합니다.

즉,

char *ptr;
char *trmp;

tmp = malloc( 10);
ptr = malloc( 10);

printf( "realloc() 호출 전 ptr의 값: %x\n", ptr);
ptr = realloc( ptr, 50);
printf( "realloc() 호출 후 ptr의 값: %x\n", ptr);

tmp가 할당받은 메모리가 걸리기 때문에 바로 크기 변경을 할 수 없어 메모리를 새로 할당받게 됩니다. realloc()함수 호출 전과 호출 후의 주소 값을 확인해 보면 바뀐 것을 보실 수 있습니다.

C언어 realloc() 함수 예제

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

int main( void)
{
   char   *ptr;
   char   *tmp;

   tmp = malloc( 10);
   ptr = malloc( 10);

   strcpy( ptr, "badayak");

   printf( "realloc() 호출 전 ptr의 값: %p\n", ptr);
   ptr   = realloc( ptr, 50);
   printf( "realloc() 호출 후 ptr의 값: %p\n", ptr);

   strcpy( ptr+strlen( ptr), ".com");  // 이전 문자열 뒤에 .com 추가
   printf( "%s\n", ptr);

   free( ptr);

   return 0;
}

C언어 realloc() 예제 실행 결과

]$ ./a.out
realloc() 호출 전 ptr의 값: 0x1993030
realloc() 호출 후 ptr의 값: 0x1993460
badayak.com
]$
SNS 공유하기
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.