Поделиться через


_expand_dbg

Изменяет размер, указанный блок памяти в куче, развернув или заключать контракт блока (отладка версия).

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

Параметры

  • userData
    Указатель к ранее выбранному блок памяти.

  • newSize
    Запрашиваемый новый размер блока (в байтах).

  • blockType
    Запрошенный тип для изменения размерого блока: _CLIENT_BLOCKOR _NORMAL_BLOCK.

  • filename
    Указатель на имя исходного файла, который запрашивается операция или развернуть NULL.

  • linenumber
    Номер линии в исходном файле, где операция была запрошена или развернуть NULL.

filename и linenumber параметры доступны только при _expand_dbg вызывает явно или _CRTDBG_MAP_ALLOC константа препроцессора была определена.

Возвращаемое значение

При успешном завершении _expand_dbg возвращает указатель на блок памяти изменяется размерому.Поскольку память не перемещена, адрес совпадает с userData.Если произошла ошибка, либо не удалось развернут до необходимого размера, то возвращается NULL.Если произошел сбой, errno сведения о природе сбоя операционной системы.Дополнительные сведения о errno см. в разделе errno, _doserrno, _sys_errlist и _sys_nerr.

Заметки

_expand_dbgфункция отладочная версия _разверните функция.После _Отладка не определяет каждый вызов _expand_dbgуменьшает к вызову _expand.Оба _expandи _expand_dbgизмените размер блока памяти в куче, но базовой _expand_dbg адаптирует несколько функций отладки: буферы с обеих сторон части блока пользователя проверяемое для параметра типа блока утечки, чтобы отслеживать определенные типы распределения и filename/linenumber сведения, чтобы указать начало координат запросов выделения.

_expand_dbg изменяет размер, указанный блок памяти с немного больше места, чем запрошено newSize.newSize может быть больше или меньше размер исходного выделенного блока памяти.Дополнительное пространство используется диспетчером отладочной кучи для связывания блоки памяти, отладки и предоставить приложению отладочные данные заголовка и перезаписать буферы.Размер выполняется или развернуть или заключать контракт исходный блок памяти._expand_dbg не перемещается в блок памяти _realloc_dbg функция.

После newSize больше развернут исходный размер блока, блок памяти.При выполнении расширения, если блок памяти нельзя развернуть, чтобы вместить запрошенный размер, NULL возвращает.После newSize не заключен контракт исходный размер блока, блок памяти до тех пор, пока новый размер не получен.

Сведения о том, как блоки памяти, выделенные инициализируются и управляемые в отладочной версии базовой кучи см. в разделе Управление памятью и куча отладки.Дополнительные сведения о типах блока распределения и способы их использования см. в разделе Типы блоков в куче отладки.Дополнительные сведения о различиях между вызовом стандартная функция кучи и сво в отладочном построении отладочной версии приложения, см. в разделе Использование отладочной версии для базовой версии.

Эта функция проверяет его параметры.If 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