realloc
메모리 블록을 다시 할당합니다.
구문
void *realloc(
void *memblock,
size_t size
);
매개 변수
memblock
이전에 할당된 메모리 블록에 대한 포인터입니다.
size
새 크기(바이트)입니다.
반환 값
realloc
는 다시 할당된(그리고 이동되었을 수 있는) 메모리 블록에 대한 void
포인터를 반환합니다.
사용 가능한 메모리가 부족하여 블록을 지정된 크기로 확장할 수 없는 경우 원래 블록은 변경되지 NULL
않고 반환됩니다.
size
가 0이면 memblock
에서 가리키는 블록이 해제됩니다. 반환 값은 NULL
이며, memblock
은 해제된 블록을 가리키는 상태로 유지됩니다.
반환 값은 모든 유형의 개체의 스토리지에 적합하게 정렬된 스토리지 공간을 가리킵니다. void
가 아닌 형식의 포인터를 가져오려면 반환 값에 형식 캐스팅을 사용합니다.
설명
참고 항목
realloc
새 동작이 Windows 운영 체제와 호환되지 않으므로 C17 동작을 구현하도록 업데이트되지 않았습니다.
realloc
함수는 할당된 메모리 블록의 크기를 변경합니다. memblock
인수는 메모리 블록의 시작 부분을 가리킵니다. memblock
이 NULL
이면 realloc
는 malloc
와 같은 방식으로 동작하며 size
바이트의 새 블록을 할당합니다. 그렇지 않은 경우 memblock
이전 호출calloc
에서 반환한 포인터이거나 realloc
. malloc
NULL
size
인수는 블록의 새 크기(바이트)를 제공합니다. 블록의 내용은 새 크기와 이전 크기 중 더 짧은 쪽까지는 변경되지 않습니다. 그러나 새 블록은 다른 위치에 있을 수 있습니다. 새 블록이 새 메모리 위치에 있을 수 있으므로 반환된 realloc
포인터가 인수를 통해 memblock
전달되는 포인터가 될 수 없습니다. realloc
는 버퍼 증가가 있는 경우 새로 할당된 메모리를 0이 아닙니다.
메모리 할당이 실패하거나 요청된 메모리의 양이 _HEAP_MAXREQ
를 초과하는 경우 realloc
는 errno
를 ENOMEM
으로 설정합니다. 이 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno
, _sys_errlist
및 _sys_nerr
를 참조하세요errno
.
realloc
는 C++ _set_new_mode
함수를 사용하여 새 처리기 모드를 설정하기 위해 호출 malloc
됩니다. 새 처리기 모드는 실패 시 malloc
이 _set_new_handler
에서 설정한 대로 새 처리기 루틴을 호출하는지 여부를 나타냅니다. 기본적으로 malloc
메모리를 할당하지 못한 경우 새 처리기 루틴을 호출하지 않습니다. realloc
가 메모리 할당에 실패한 경우 malloc
이 new
연산자가 같은 이유로 실패했을 때 수행하는 것과 동일한 방식으로 새 처리기 루틴을 호출하도록 이 기본 동작을 재정의할 수 있습니다. 기본값을 재정의하려면 다음 코드를
_set_new_mode(1);
초기 프로그램 또는 NEWMODE와 연결합니다. OBJ(링크 옵션 참조).
애플리케이션이 C 런타임 라이브러리 realloc
의 디버그 버전과 연결되면 .로 확인 _realloc_dbg
됩니다. 디버깅 프로세스 중에 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙을 참조하세요.
realloc
가 표시 __declspec(noalias)
되고 __declspec(restrict)
, 함수가 전역 변수를 수정하지 않도록 보장되고 반환된 포인터가 별칭이 지정되지 않음을 의미합니다. 자세한 내용은 noalias
및 restrict
를 참조하세요.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
realloc |
<stdlib.h> 및 <malloc.h> |
호환성에 대한 자세한 내용은 호환성을 참조하세요.
예시
// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
long *buffer, *oldbuffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf_s( "Size of block after malloc of 1000 longs: %u\n", size );
// Reallocate and show new size:
oldbuffer = buffer; // save pointer in case realloc fails
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
{
free( oldbuffer ); // free original block
exit( 1 );
}
size = _msize( buffer );
printf_s( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
exit( 0 );
}
Size of block after malloc of 1000 longs: 4000
Size of block after realloc of 1000 more longs: 8000