_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.

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 );
}

Hasil

Size of block after _malloc_dbg of 40 longs: 160
Size of block after _realloc_dbg of 40 more longs: 320

Baca juga

Rutinitas debug
_malloc_dbg