C realloc() 동적 메모리의 크기를 변경 함수
malloc()이나 calloc()에서 할당받은 메모리의 크기를 변경합니다. 또한 변경하려는 메모리 영역의 값을 유지하면서 크기를 수정합니다.
- 헤더: stdlib.h
- 형태: void *realloc(void *ptr, size_t size)
- 인수: void *ptr 메모리의 크기를 변경할 포인터
size_t size 새로 지정할 메모리의 크기 - 반환: void * 메모리의 크기가 변경된 메모리의 주소
주의)
새로 변경할 메모리의 크기가 변경하기 어려운 경우에는 아래와 같이 새로 메모리가 할당되므로, 이전 포인터 값을 계속 사용하는 것은 위험합니다.
- 새로 지정한 메모리 양으로 메모리를 할당받고,
- 이전 메모리의 내용을 복사한 후,
- 이전에 할당받은 메모리를 반환합니다.
- 그리고 새로 할당받은 메모리를 반환합니다.
즉,
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
]$
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
C언어 memcpy 함수 메모리 영역 복사 (0) | 2020.03.12 |
---|---|
C언어 free 함수 할당받은 메모리를 반환 (0) | 2020.03.12 |
C언어 calloc 함수 요소 크기 지정 동적 메모리 할당 (2) | 2020.03.12 |