_msize_dbg
Menghitung ukuran blok memori dalam tumpukan (hanya versi debug).
Sintaks
size_t _msize_dbg(
void *userData,
int blockType
);
Parameter
userData
Arahkan ke blok memori untuk menentukan ukurannya.
blockType
Jenis blok memori yang ditentukan: _CLIENT_BLOCK
atau _NORMAL_BLOCK
.
Nilai hasil
Setelah berhasil diselesaikan, _msize_dbg
mengembalikan ukuran (dalam byte) dari blok memori yang ditentukan; jika tidak, ia mengembalikan NULL
.
Keterangan
_msize_dbg
adalah versi debug dari fungsi _msize
. Ketika _DEBUG
tidak ditentukan, setiap panggilan ke _msize_dbg
dikurangi menjadi panggilan ke _msize
. Keduanya _msize
dan _msize_dbg
menghitung ukuran blok memori di tumpukan dasar, tetapi _msize_dbg
menambahkan dua fitur penelusuran kesalahan: Ini termasuk buffer di salah satu sisi bagian pengguna dari blok memori dalam ukuran yang dikembalikan dan memungkinkan perhitungan ukuran untuk jenis blok tertentu.
Untuk informasi tentang bagaimana blok memori dialokasikan, diinisialisasi, dan dikelola dalam versi debug timbunan dasar, lihat detail timbunan debug CRT. Untuk informasi tentang jenis blok alokasi dan cara penggunaannya, lihat Jenis blok pada tumpukan debug. Untuk informasi tentang perbedaan antara fungsi timbunan standar dan versi debug, lihat Versi debug fungsi alokasi timbunan.
Fungsi ini memvalidasi parameternya. Jika memblock
adalah penunjuk null, _msize_dbg
memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika kesalahan ditangani, fungsi diatur errno
ke EINVAL
dan mengembalikan -1 (18.446.744.073.709.551.615 tidak ditandatangani).
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_msize_dbg |
<crtdbg.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Pustaka
Debug versi pustaka run-time C saja.
Contoh
// 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 );
}
Output
Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320