_msize_dbg
Yığındaki bir bellek bloğunun boyutunu hesaplar (yalnızca hata ayıklama sürümü).
Sözdizimi
size_t _msize_dbg(
void *userData,
int blockType
);
Parametreler
userData
Boyutunun belirleneceği bellek bloğuna yönelik işaretçi.
blockType
Belirtilen bellek bloğunun türü: _CLIENT_BLOCK
veya _NORMAL_BLOCK
.
Dönüş değeri
Başarıyla tamamlandığında, _msize_dbg
belirtilen bellek bloğunun boyutunu (bayt cinsinden) döndürür; aksi takdirde döndürür NULL
.
Açıklamalar
_msize_dbg
, _msize
işlevinin hata ayıklama sürümüdür. Tanımlanmadığında _DEBUG
, çağrısının her _msize_dbg
biri öğesine yapılan çağrıya _msize
indirgenir. Hem hem _msize_dbg
de _msize
temel yığındaki bir bellek bloğunun boyutunu hesaplayın, ancak _msize_dbg
iki hata ayıklama özelliği ekler: Döndürülen boyutta bellek bloğunun kullanıcı bölümünün her iki tarafındaki arabellekleri içerir ve belirli blok türleri için boyut hesaplamalarına izin verir.
Temel yığının hata ayıklama sürümünde bellek bloklarının nasıl ayrıldığı, başlatıldığı ve yönetildiğini öğrenmek için bkz . CRT hata ayıklama yığını ayrıntıları. Ayırma bloğu türleri ve bunların nasıl kullanıldığı hakkında bilgi için bkz . Hata ayıklama yığınındaki blok türleri. Standart yığın işlevleri ile hata ayıklama sürümleri arasındaki farklar hakkında bilgi için bkz . Yığın ayırma işlevlerinin sürümlerinde hata ayıklama.
Bu işlev parametresini doğrular. Null işaretçiysememblock
, _msize_dbg
Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağırır. Hata işlenirse işlev olarak ayarlanır errno
EINVAL
ve -1 döndürür (18.446.744.073.709.551.615 işaretsiz).
Gereksinimler
Yordam | Gerekli başlık |
---|---|
_msize_dbg |
<crtdbg.h> |
Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.
Kitaplıklar
Yalnızca C çalışma zamanı kitaplıklarının sürümlerinde hata ayıklama.
Örnek
// 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 );
}
Çıktı
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320