realloc
메모리 블록 다시 할당
void *realloc(
void *memblock,
size_t size
);
매개 변수
memblock
이전에 할당된 메모리 블록에 대한 포인터입니다.size
새 크기(바이트로)입니다.
반환 값
realloc 는 메모리 블럭을 재할당(이동 가능한) 하기 위해 void 포인터를 반환합니다.
주어진 크기에 대해 확장 가능하고 충분히 사용 가능한 메모리 블록이 있는 경우, 원래 블록은 변경 되지 않고 NULL 가 반환됩니다.
size가 0 인 경우 memblock 가 가르키는 포인터는 해제 됩니다. 반환 값은 NULL 이고 memblock 는 해제 된 블록을 가르킵니다.
반환 값은 모든 개체 형식의 저장소가 적절하게 정렬되도록 하는 것을 보증하는 저장 공간을 가리킵니다. void가 아닌 형식에 포인터를 반환하려면 반환 값에 대한 형식 캐스트를 사용합니다.
설명
_realloc 함수는 할당된 메모리 블록의 크기를 변경합니다. memblock 인수는 메모리 블록의 시작 부분을 가리킵니다. memblock 가 NULL 인 경우, realloc 는 size 바이트의 새로운 블록을 할당하고 malloc 와 같은 방법으로 작동합니다. memblock 가 NULL 이 아닌 경우, calloc, malloc, 또는 realloc의 이전 호출에서 반환하는 포인터입니다.
size 인수는 블록의 새 크기를 바이트 단위로 제공합니다. 새로운 블록이 다른 위치에있을 수 있지만, 블록의 내용은 새롭고 오래된 크기 중 짧은것으로 변하지 않습니다. 새 블럭이 새로운 메모리 위치에 있을 수 있기 때문에, _realloc 가 반환하는 포인터는 memblock 인수로 전달 되는 포인터로 생성 되지 않습니다. realloc 는 버퍼 증가의 경우 메모리에 새로 할당 된 0이 아닙니다.
realloc 는 메모리 할당이 실패하거나 요청한 메모리 크기가 _HEAP_MAXREQ를 초과하는 경우 errno 는 ENOMEM 로 설정됩니다. 이 오류 코드 및 기타 오류 코드에 대한 자세한 내용은 errno, _doserrno, _sys_errlist 및 _sys_nerr을 참조하십시오.
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 를 참조하십시오.
요구 사항
루틴 |
필수 헤더 |
---|---|
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 );
}
해당 .NET Framework 항목
해당 사항 없음. 표준 C 함수를 호출하려면 PInvoke를 사용합니다. 자세한 내용은 플랫폼 호출 예제를 참조하십시오.