Compartir a través de


_CrtIsValidHeapPointer

Comprueba que un puntero especificado está en el montón local (versión de depuración solo).

int _CrtIsValidHeapPointer( 
   const void *userData 
);

Parámetros

  • userData
    Puntero al principio de un bloque de memoria asignado.

Valor devuelto

_CrtIsValidHeapPointer devuelve TRUE si el puntero especificado está en el montón local.si no, la función devuelve FALSE.

Comentarios

La función de _CrtIsValidHeapPointer se utiliza para asegurarse de que una dirección de memoria concreta está dentro del montón local.El montón local hace referencia al montón creado y administrado por una instancia determinada de la biblioteca en tiempo de ejecución de C.Si una biblioteca de (DLL) vínculos dinámicos contiene un vínculo estático a la biblioteca en tiempo de ejecución, tiene su propia instancia del montón en tiempo de ejecución, y por consiguiente de su propia pila, independiente del montón local de la aplicación.Cuando _DEBUG no está definido, las llamadas a _CrtIsValidHeapPointer se quitan durante el preprocesamiento.

Dado que esta función devuelve TRUE o FALSE, puede pasar a una de las macros de _ASSERT para crear un mecanismo sencillo de control de errores de depuración.El ejemplo siguiente se genera un error de aserción si la dirección especificada no se encuentra dentro del montón local:

_ASSERTE( _CrtIsValidHeapPointer( userData ) );

Para obtener más información sobre cómo _CrtIsValidHeapPointer se puede utilizar con otras funciones y macros de depuración, vea Utilizando las macros para comprobación e informes.Para obtener información sobre cómo los bloques de memoria se asignan, inicialice, y se administran en la versión de depuración del montón base, vea Administración de memoria y el montón de depuración.

Requisitos

rutina

Encabezado necesario

_CrtIsValidHeapPointer

<crtdbg.h>

Para obtener más información de compatibilidad, vea compatibilidad en la Introducción.

bibliotecas

Versiones de depuración de Bibliotecas en tiempo de ejecución de C únicamente.

Ejemplo

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

Output

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

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Vea también

Referencia

Rutinas de depuración