reallocrealloc

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

구문Syntax

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

매개 변수Parameters

memblock
이전에 할당된 메모리 블록에 대한 포인터입니다.Pointer to previously allocated memory block.

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

반환 값Return Value

realloc****void 다시 할당 된 (그리고 이동 가능한) 메모리 블록에 대 한 포인터를 반환 합니다.realloc returns a void pointer to the reallocated (and possibly moved) memory block.

블록을 지정 된 크기로 확장 하는 데 사용할 수 있는 메모리가 충분 하지 않은 경우 원래 블록은 변경 되지 않고 그대로 유지 되 고 NULL 이 반환 됩니다.If there is not enough available memory to expand the block to the given size, the original block is left unchanged, and NULL is returned.

size 가 0 이면에서 가리키는 블록이 memblock 해제 됩니다. 반환 값은 이며 NULL , memblock 은 해제 된 블록을 가리키는 상태로 유지 됩니다.If size is zero, then the block pointed to by memblock is freed; the return value is NULL, and memblock is left pointing at a freed block.

반환 값은 모든 형식의 개체 저장을 위해 적절 하 게 정렬 된 저장소 공간을 가리킵니다.The return value points to a storage space that is suitably aligned for storage of any type of object. 이외의 형식에 대 한 포인터를 가져오려면 void 반환 값에 형식 캐스팅을 사용 합니다.To get a pointer to a type other than void, use a type cast on the return value.

설명Remarks

참고

realloc 새 동작이 Windows 운영 체제와 호환 되지 않기 때문에 C17 동작을 구현 하도록 업데이트 되지 않았습니다.realloc hasn't been updated to implement C17 behavior because the new behavior isn't compatible with the Windows operating system.

realloc 함수는 할당 된 메모리 블록의 크기를 변경 합니다.The realloc function changes the size of an allocated memory block. memblock 인수는 메모리 블록의 시작 부분을 가리킵니다.The memblock argument points to the beginning of the memory block. 가 이면는와 memblock NULL realloc 동일한 방식으로 동작 malloc 하 고 새 바이트 블록을 할당 size 합니다.If memblock is NULL, realloc behaves the same way as malloc and allocates a new block of size bytes. memblock 가이 아니면, NULL 또는에 대 한 이전 호출에서 반환 된 포인터 여야 calloc 합니다 malloc realloc .If memblock is not NULL, it should be a pointer returned by a previous call to calloc, malloc, or realloc.

size 인수는 블록의 새 크기 (바이트)를 제공 합니다.The size argument gives the new size of the block, in bytes. 블록의 내용은 새 크기와 이전 크기 중 더 짧은 쪽까지는 변경되지 않습니다. 그러나 새 블록은 다른 위치에 있을 수 있습니다.The contents of the block are unchanged up to the shorter of the new and old sizes, although the new block can be in a different location. 새 블록은 새 메모리 위치에 있을 수 있으므로에서 반환 되는 포인터는 realloc 인수를 통해 전달 되는 포인터가 아닙니다 memblock .Because the new block can be in a new memory location, the pointer returned by realloc is not guaranteed to be the pointer passed through the memblock argument. realloc 버퍼 증가 시 새로 할당 된 메모리는 0이 아닙니다.realloc does not zero newly allocated memory in the case of buffer growth.

realloc****errno ENOMEM 메모리 할당이 실패 하거나 요청 된 메모리의 양이를 초과 하는 경우를로 설정 _HEAP_MAXREQ 합니다.realloc sets errno to ENOMEM if the memory allocation fails or if the amount of memory requested exceeds _HEAP_MAXREQ. 이러한 오류 코드 및 기타 오류 코드에 대한 내용은 errno, _doserrno, _sys_errlist 및 _sys_nerr을 참조하세요.For information on this and other error codes, see errno, _doserrno, _sys_errlist, and _sys_nerr.

realloc****malloc 는 c + + _set_new_mode 함수를 사용 하 여 새 처리기 모드를 설정 하기 위해를 호출 합니다.realloc calls malloc in order to use the C++ _set_new_mode function to set the new handler mode. 새 처리기 모드는 실패 시 malloc _set_new_handler에 의해 설정 된 대로 새 처리기 루틴을 호출 하는지 여부를 나타냅니다.The new handler mode indicates whether, on failure, malloc is to call the new handler routine as set by _set_new_handler. 기본적으로에서는 malloc 오류 발생 시 새 처리기 루틴을 호출 하 여 메모리를 할당 하지 않습니다.By default, malloc does not call the new handler routine on failure to allocate memory. realloc 메모리 할당에 실패 하는 경우 malloc 연산자가 new 같은 이유로 실패 했을 때 수행 하는 것과 동일한 방식으로 새 처리기 루틴을 호출 하도록이 기본 동작을 재정의할 수 있습니다.You can override this default behavior so that, when realloc fails to allocate memory, malloc calls the new handler routine in the same way that the new operator does when it fails for the same reason. 기본값을 재정의하려면 다음 코드를To override the default, call

_set_new_mode(1);

프로그램에서 초기에 호출하거나, NEWMODE.OBJ를 사용하여 연결합니다(링크 옵션 참조).early in ones program, or link with NEWMODE.OBJ (see Link Options).

응용 프로그램이 C 런타임 라이브러리의 디버그 버전에 연결 된 경우 realloc _realloc_dbg으로 확인 됩니다.When the application is linked with a debug version of the C run-time libraries, realloc resolves to _realloc_dbg. 디버깅 프로세스 동안 힙을 관리하는 방법에 대한 자세한 내용은 CRT 디버그 힙을 참조하세요.For more information about how the heap is managed during the debugging process, see The CRT Debug Heap.

realloc 는로 표시 되며,이는 __declspec(noalias) __declspec(restrict) 함수가 전역 변수를 수정 하지 않도록 보장 하 고 반환 된 포인터에 별칭이 지정 되지 않음을 의미 합니다.realloc is marked __declspec(noalias) and __declspec(restrict), meaning that the function is guaranteed not to modify global variables, and that the pointer returned is not aliased. 자세한 내용은 noaliasrestrict를 참조하세요.For more information, see noalias and restrict.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

요구 사항Requirements

루틴에서 반환된 값Routine 필수 헤더Required header
realloc <stdlib.h> 및 <malloc.h><stdlib.h> and <malloc.h>

호환성에 대한 자세한 내용은 Compatibility을 참조하세요.For additional compatibility information, see Compatibility.

예제Example

// 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

참고 항목See also

메모리 할당Memory Allocation
calloccalloc
늘릴free
mallocmalloc