_msize_dbg
Вычисляет размер блока памяти в куче (только в отладочной версии).
Синтаксис
size_t _msize_dbg(
void *userData,
int blockType
);
Параметры
userData
Указатель на блок памяти, размер которого необходимо определить.
blockType
Тип указанного блока памяти: _CLIENT_BLOCK
или _NORMAL_BLOCK
.
Возвращаемое значение
При успешном завершении _msize_dbg
возвращает размер (в байтах) указанного блока памяти; в противном случае возвращается NULL
.
Замечания
_msize_dbg
— это отладочная версия функции _msize
. Если _DEBUG
не определено, каждый вызов _msize_dbg
уменьшается до вызова _msize
. Обе функции _msize
и _msize_dbg
вычисляют размер блока памяти в основной куче, однако _msize_dbg
добавляет две функции отладки: одна функция включает в возвращаемый размер буферы по обеим сторонам пользовательской части блока памяти, вторая позволяет рассчитать размер определенных типов блоков.
Сведения о выделении, инициализации и управлении блоками памяти в отладочной версии базовой кучи см. в сведениях об отладочной куче CRT. Сведения о типах блоков выделения и их использовании см. в разделе "Типы блоков" в куче отладки. Сведения о различиях между стандартными функциями кучи и версиями отладки см. в разделе "Отладка версий функций выделения кучи".
Эта функция проверяет свои параметры. Если memblock
имеет значение NULL, _msize_dbg
вызывает обработчик недопустимых параметров, как описано в разделе проверки параметров. Если ошибка обрабатывается, функция errno
EINVAL
задает и возвращает значение -1 (18 446 744 073 709 551 615 без знака).
Требования
Маршрут | Обязательный заголовок |
---|---|
_msize_dbg |
<crtdbg.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Только отладочные версии библиотек времени выполнения языка C.
Пример
// crt_msize_dbg.c
// compile with: /MTd
/*
* 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 _realloc_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, *newbuffer;
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 );
/*
* Reallocate the buffer using _realloc_dbg and show the new size
*/
newbuffer = _realloc_dbg( buffer, size + (40 * sizeof(long)), _NORMAL_BLOCK, __FILE__, __LINE__ );
if( newbuffer == NULL )
exit( 1 );
buffer = newbuffer;
size = _msize_dbg( buffer, _NORMAL_BLOCK );
printf( "Size of block after _realloc_dbg of 40 more longs: %u\n", size );
free( buffer );
exit( 0 );
}
Выходные данные
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320