다음을 통해 공유


_expand

메모리 블록의 크기를 변경합니다.

구문

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

매개 변수

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

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

반환 값

_expand는 다시 할당된 메모리 블록에 대한 void 포인터를 반환합니다. _expand와 달리 realloc블록을 이동하여 크기를 변경할 수 없습니다. 따라서 블록을 이동 memblock 하지 않고 확장할 수 있는 충분한 메모리가 있는 경우 매개 변수 _expand 는 반환 값과 동일합니다.

작업 중에 오류가 발견될 경우 _expandNULL을 반환합니다. 예를 들어 _expand를 사용하여 메모리 블록을 축소할 경우 작은 블록 힙의 손상이나 잘못된 블록 포인터가 발견되고 NULL이 반환될 수 있습니다.

블록을 이동하지 않고 확장할 수 있는 메모리가 충분하지 않으면 함수가 반환됩니다 NULL. _expand는 요청된 것보다 작은 크기로 확장된 블록을 반환하지 않습니다. 오류가 발생할 경우 errno는 오류의 특성을 나타냅니다. 에 대한 errno자세한 내용은 , , _doserrno_sys_errlist_sys_nerr 를 참조하세요errno.

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

설명

_expand 함수는 힙 내에서 위치를 이동하지 않고 블록을 확장하거나 축소하여 이전에 할당된 메모리 블록의 크기를 변경합니다. memblock 매개 변수는 블록의 시작 부분을 가리킵니다. size 매개 변수는 블록의 새 크기(바이트)를 제공합니다. 블록의 콘텐츠는 새 크기와 이전 크기 중 더 짧은 크기까지 변경 사항이 없습니다. memblock 해제된 블록이 되어서는 안 됩니다.

참고 항목

64비트 플랫폼에서 새 크기가 현재 크기보다 작을 경우 _expand는 블록을 축소할 수 없습니다. 특히, 블록 크기가 16K보다 작아 블록이 낮은 조각화 힙에서 할당된 경우 _expand는 블록을 변경하지 않고 memblock을 반환합니다.

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

이 함수는 해당 매개 변수의 유효성을 검사합니다. null 포인터인 경우 memblock 이 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 계속해서 실행하도록 허용된 경우 errnoEINVAL 로 설정되고 함수에서 NULL버전입니다. 보다 큰 경우 size , errno 로 설정 ENOMEM되 고 함수가 반환 합니다NULL._HEAP_MAXREQ

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT의 전역 상태를 참조하세요.

요구 사항

함수 필수 헤더
_expand <malloc.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// crt_expand.c

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

int main( void )
{
   char *bufchar;
   printf( "Allocate a 512 element buffer\n" );
   if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
      exit( 1 );
   printf( "Allocated %d bytes at %Fp\n",
         _msize( bufchar ), (void *)bufchar );
   if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
      printf( "Can't expand" );
   else
      printf( "Expanded block to %d bytes at %Fp\n",
            _msize( bufchar ), (void *)bufchar );
   // Free memory
   free( bufchar );
   exit( 0 );
}
Allocate a 512 element buffer
Allocated 512 bytes at 002C12BC
Expanded block to 1024 bytes at 002C12BC

참고 항목

메모리 할당
calloc
free
malloc
_msize
realloc