Aracılığıyla paylaş


_CrtIsValidHeapPointer

Belirtilen bir işaretçi (yalnızca hata ayıklama sürümü) yerel yığın içinde olduğunu doğrular.

int _CrtIsValidHeapPointer( 
   const void *userData 
);

Parametreler

  • userData
    Ayrılmış bellek bloğu başlangıcı işaretçisi.

Dönüş Değeri

_CrtIsValidHeapPointerYerel yığın içinde belirtilen işaretçi ise doğru sonucunu verir. Aksi durumda, işlev false değerini döndürür.

Notlar

_CrtIsValidHeapPointer İşlevi, belirli bellek adresi yerel yığın içinde olduğundan emin olmak için kullanılır. Yerel öbek öbek oluşturulur ve c Çalışma Zamanı Kitaplığı belirli bir örneği tarafından yönetilen anlamına gelir. Dinamik bağlantı kitaplığı (dll) çalışma zamanı kitaplığı statik bir bağlantı içeriyorsa, kendi çalışma zamanı öbek ve bu nedenle, uygulamanın yerel yığın bağımsız kendi yığın örneği vardır. Zaman _debug tanımlı değilse, çağıran için _CrtIsValidHeapPointer ön-işleme sırasında kaldırılır.

Bu işlevi true veya false döndürür çünkü onu birine geçirilebilir _assert basit bir hata ayıklama hata işleme mekanizması oluşturmak için makrolar. Aşağıdaki örnek belirtilen adres yerel yığın içinde bulunamazsa, bir onaylama işlemi hatasına neden olur:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Hakkında daha fazla bilgi için _CrtIsValidHeapPointer diğer hata ayıklama işlevleri ve makrolar ile kullanılabilir, bkz: Makro kullanarak doğrulama ve raporlama için. Nasıl bellek bloklarını tahsis başlatıldı ve yönetilen temel yığın hata ayıklama sürümü hakkında daha fazla bilgi için bkz: bellek yönetimi ve hata ayıklama öbek.

Gereksinimler

Yordamı

Gerekli başlık

_CrtIsValidHeapPointer

<crtdbg.h>

Daha fazla uyumluluk bilgileri için bkz: Uyumluluk giriş.

Kitaplıkları

Hata ayıklama sürümlerini c çalışma zamanı kitaplıkları yalnızca.

Örnek

// crt_isvalid.c
/*
 * This program allocates a block of memory using _malloc_dbg
 * and then tests the validity of this memory by calling 
 * _CrtIsMemoryBlock,_CrtIsValidPointer, and _CrtIsValidHeapPointer.
 */

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <crtdbg.h>

#define  TRUE   1
#define  FALSE  0

int main( void )
{
        char *my_pointer;

        /* 
         * Call _malloc_dbg to include the filename and line number
         * of our allocation request in the header information
         */
        my_pointer = (char *)_malloc_dbg( sizeof(char) * 10, 
        _NORMAL_BLOCK, __FILE__, __LINE__ );

        // Ensure that the memory got allocated correctly
        _CrtIsMemoryBlock((const void *)my_pointer, sizeof(char) * 10, 
        NULL, NULL, NULL );

         // Test for read/write accessibility
        if (_CrtIsValidPointer((const void *)my_pointer, 
        sizeof(char) * 10, TRUE))
                printf("my_pointer has read and write accessibility.\n");
        else
                printf("my_pointer only has read access.\n");

        // Make sure my_pointer is within the local heap
        if (_CrtIsValidHeapPointer((const void *)my_pointer))
                printf("my_pointer is within the local heap.\n");
        else
                printf("my_pointer is not located within the local"
                       " heap.\n");

        free(my_pointer);
}

Çıktı

my_pointer has read and write accessibility.
my_pointer is within the local heap.

.NET Framework Eşdeğeri

Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.

Ayrıca bkz.

Başvuru

Yordamlar hata ayıklama