다음을 통해 공유


_expand_dbg

지정 된 힙의 메모리 블록 확장 또는 축소 블록 (디버그 버전에만 해당)로 조정 됩니다.

void *_expand_dbg( 
   void *userData,
   size_t newSize,
   int blockType,
   const char *filename,
   int linenumber 
);

매개 변수

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

  • newSize
    새 크기를 바이트 단위로 블록을 요청 합니다.

  • blockType
    입력 블록 크기 변경된에 대 한 요청: _CLIENT_BLOCK 또는 _NORMAL_BLOCK.

  • filename
    확장 작업을 요청 하는 소스 파일의 이름에 대 한 포인터 또는 NULL.

  • linenumber
    줄 번호 소스 파일 확장 작업 요청 또는 NULL.

filename 및 linenumber 매개 변수는 에서만 사용할 수 있는 경우 _expand_dbg 명시적으로 호출 된 나는 _CRTDBG_MAP_ALLOC 전처리기 상수 정의 되었습니다.

반환 값

성공적으로 완료 되 면, _expand_dbg 크기 조정된 메모리 블록에 대 한 포인터를 반환 합니다.주소에서 메모리를 이동 하지 않습니다 때문에 사용자 데이터와 동일 합니다.오류가 발생 하거나 블록을 요청한 크기를 확장할 수 없습니다 반환 NULL.오류가 발생 하면 errno 정보 실패를 운영 체제에서 특성에 대 한 있습니다.errno에 대한 자세한 내용은 errno, _doserrno, _sys_errlist, _sys_nerr를 참조하십시오.

설명

_expand_dbg 함수는 _의 디버그 버전입니다확장 함수입니다.때 _DEBUG 정의 되지 않은 각 호출에 _expand_dbg 에 대 한 호출을 감소 _expand.둘 다 _expand 및 _expand_dbg 기본 힙에서 메모리 블록의 크기를 조정 하지만 _expand_dbg 몇 개의 디버깅 기능을 사용할 수: 버퍼 누수에 대 한 특정 한 할당 형식 추적 하는 블록 형식 매개 변수를 테스트 하는 블록의 사용자 부분에 대 한 filename/linenumber 할당 요청의 출처를 확인 하는 정보.

_expand_dbg여는 요청 된 것 보다 약간 더 많은 공간이 지정 된 메모리 블록의 크기를 조정 합니다. newSize.newSize원래 할당 된 메모리 블록의 크기 보다 큰지 또는 작은지 될 수 있습니다.추가 공간 디버그 메모리 블록을 연결 하 고 응용 프로그램을 디버그 헤더 정보를 제공 하 고 버퍼를 덮어쓸 디버그 힙 관리자가 사용 됩니다.크기를 조정할 확장 하거나 원래 메모리 블록을 축소 하 여 수행할 수 있습니다._expand_dbg메모리 블록으로 이동 하지 않는 있는 _realloc_dbg 함수입니다.

때 newSize 원래 블록 확장 메모리 블록 크기 보다 큽니다.확장 메모리 블록의 요청 된 크기에 맞게 확장할 수 없습니다 경우, 동안 NULL 이 반환 됩니다.때 newSize 의 새 크기를 얻을 때까지 원래 블록 크기의 메모리 블록 축소 됩니다 것 보다 작습니다.

메모리 블록 할당, 초기화 및 기본 힙의 디버그 버전에서 관리 하는 방법에 대 한 자세한 내용은 참조 하십시오. 메모리 관리 및 디버그 힙.할당 블록 종류 및 사용 방법에 대 한 자세한 내용은 의 디버그 힙의 블록 형식.응용 프로그램의 디버그 빌드를 호출 하는 표준 힙 함수 및 해당 디버그 버전 간의 차이점에 대 한 자세한 내용은 를 디버그 버전 대의 기본 버전을 사용 하 여.

이 함수의 매개 변수의 유효성을 검사 합니다.경우 memblock 는 null 포인터 크기 보다 큰 경우 또는 _HEAP_MAXREQ의 설명에 따라이 함수에 잘못 된 매개 변수 처리기를 호출 매개 변수 유효성 검사.실행을 계속 수 있으면 errno 으로 설정 EINVAL 함수를 반환 하 고 NULL.

요구 사항

루틴

필수 헤더

_expand_dbg

<crtdbg.h>

더 많은 호환성 정보를 참조 하십시오. 호환성 소개에서 합니다.

라이브러리

디버그 버전의 C 런타임 라이브러리 만 합니다.

예제

// crt_expand_dbg.c
//
// This program allocates a block of memory using _malloc_dbg
// and then calls _msize_dbg to display the size of that block.
// Next, it uses _expand_dbg to expand the amount of
// memory used by the buffer and then calls _msize_dbg again to
// display the new amount of memory allocated to the buffer.
//

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

int main( void )
{
   long *buffer;
   size_t size;

   // Call _malloc_dbg to include the filename and line number
   // of our allocation request in the header
   buffer = (long *)_malloc_dbg( 40 * sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );
   if( buffer == NULL )
      exit( 1 );

   // Get the size of the buffer by calling _msize_dbg
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _malloc_dbg of 40 longs: %u\n", size );

   // Expand the buffer using _expand_dbg and show the new size
   buffer = (long *)_expand_dbg( buffer, size + sizeof(long),
                                 _NORMAL_BLOCK, __FILE__, __LINE__ );

   if( buffer == NULL )
      exit( 1 );
   size = _msize_dbg( buffer, _NORMAL_BLOCK );
   printf( "Size of block after _expand_dbg of 1 more long: %u\n",
           size );

   free( buffer );
   exit( 0 );
}
  

주석

이 프로그램의 출력에는 모든 섹션을 확장 하는 사용자 컴퓨터의 능력에 따라 달라 집니다.모든 섹션이 확장 되어 있으면 출력은 출력 섹션에 반영 됩니다.

해당 .NET Framework 항목

해당 사항 없음. 표준 C 함수를 호출할 수 있습니다 PInvoke. 자세한 내용은 플랫폼 호출 예제.

참고 항목

참조

루틴을 디버깅 합니다.

_malloc_dbg