다음을 통해 공유


realloc

메모리 블록을 다시 할당합니다.

구문

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

매개 변수

memblock
이전에 할당된 메모리 블록에 대한 포인터입니다.

size
새 크기(바이트)입니다.

반환 값

realloc는 다시 할당된(그리고 이동되었을 수 있는) 메모리 블록에 대한 void 포인터를 반환합니다.

사용 가능한 메모리가 부족하여 블록을 지정된 크기로 확장할 수 없는 경우 원래 블록은 변경되지 NULL 않고 반환됩니다.

size가 0이면 memblock에서 가리키는 블록이 해제됩니다. 반환 값은 NULL이며, memblock은 해제된 블록을 가리키는 상태로 유지됩니다.

반환 값은 모든 유형의 개체의 스토리지에 적합하게 정렬된 스토리지 공간을 가리킵니다. void가 아닌 형식의 포인터를 가져오려면 반환 값에 형식 캐스팅을 사용합니다.

설명

참고 항목

realloc 새 동작이 Windows 운영 체제와 호환되지 않으므로 C17 동작을 구현하도록 업데이트되지 않았습니다.

realloc 함수는 할당된 메모리 블록의 크기를 변경합니다. memblock 인수는 메모리 블록의 시작 부분을 가리킵니다. memblockNULL이면 reallocmalloc와 같은 방식으로 동작하며 size바이트의 새 블록을 할당합니다. 그렇지 않은 경우 memblock 이전 호출calloc에서 반환한 포인터이거나 realloc. mallocNULL

size 인수는 블록의 새 크기(바이트)를 제공합니다. 블록의 내용은 새 크기와 이전 크기 중 더 짧은 쪽까지는 변경되지 않습니다. 그러나 새 블록은 다른 위치에 있을 수 있습니다. 새 블록이 새 메모리 위치에 있을 수 있으므로 반환된 realloc 포인터가 인수를 통해 memblock 전달되는 포인터가 될 수 없습니다. realloc 는 버퍼 증가가 있는 경우 새로 할당된 메모리를 0이 아닙니다.

메모리 할당이 실패하거나 요청된 메모리의 양이 _HEAP_MAXREQ를 초과하는 경우 reallocerrnoENOMEM으로 설정합니다. 이 코드 및 기타 오류 코드에 대한 자세한 내용은 , _doserrno, _sys_errlist_sys_nerr를 참조하세요errno.

realloc는 C++ _set_new_mode 함수를 사용하여 새 처리기 모드를 설정하기 위해 호출 malloc 됩니다. 새 처리기 모드는 실패 시 malloc_set_new_handler에서 설정한 대로 새 처리기 루틴을 호출하는지 여부를 나타냅니다. 기본적으로 malloc 메모리를 할당하지 못한 경우 새 처리기 루틴을 호출하지 않습니다. realloc가 메모리 할당에 실패한 경우 mallocnew 연산자가 같은 이유로 실패했을 때 수행하는 것과 동일한 방식으로 새 처리기 루틴을 호출하도록 이 기본 동작을 재정의할 수 있습니다. 기본값을 재정의하려면 다음 코드를

_set_new_mode(1);

초기 프로그램 또는 NEWMODE와 연결합니다. OBJ(링크 옵션 참조).

애플리케이션이 C 런타임 라이브러리 realloc 의 디버그 버전과 연결되면 .로 확인 _realloc_dbg됩니다. 디버깅 프로세스 중에 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙을 참조하세요.

realloc 가 표시 __declspec(noalias) 되고 __declspec(restrict), 함수가 전역 변수를 수정하지 않도록 보장되고 반환된 포인터가 별칭이 지정되지 않음을 의미합니다. 자세한 내용은 noaliasrestrict를 참조하세요.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 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

참고 항목

메모리 할당
calloc
free
malloc