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


_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

См. также

Отладка подпрограмм
_malloc_dbg