_calloc_dbg
在使用额外的空间堆分配给定数的内存块调试标头的并复盖缓冲区 (请只调试版本)。
void *_calloc_dbg(
size_t num,
size_t size,
int blockType,
const char *filename,
int linenumber
);
参数
num
的请求数内存块。size
每个请求的内存块大小 (字节)。blockType
请求的内存块类型: _CLIENT_BLOCK 或 _NORMAL_BLOCK。有关分配的信息块类型以及如何使用它们,请参见 调试堆上的块类型。
filename
对请求分配操作或 NULL源文件的名称的指针。linenumber
在分配请求的操作或 NULL的源文件中的行号。
filename 和 linenumber 参数才可用,当 _calloc_dbg 显式调用或 _CRTDBG_MAP_ALLOC 预处理器来定义。
返回值
在成功完成,此函数返回指向最后分配的部分内存块的用户,调用新的处理程序函数或返回 NULL。 有关返回行为的完整说明,请参见 " 备注 " 节。 有关如何安装的更多信息使用新的处理程序函数,请参见 calloc 功能。
备注
_calloc_dbg 是 calloc 函数的 " debug " 版本。 当 _DEBUG 未定义时,每个调用 _calloc_dbg 减少到 calloc的调用。 calloc 和 _calloc_dbg 在基堆,但是, _calloc_dbg 提供分配 num 内存块一些调试功能:
在测试块的两侧用户部分的缓冲区对于泄漏。
跟踪特定分配的一个块类型的参数类型。
filename/确定分配请求的原点的linenumber 信息。
_calloc_dbg 与请求的 size一个内存块。稍有更多的空间。 调试堆管理器用于附加空间链接调试内存块,并提供应用程序提供调试标题信息并复盖缓冲区。 当分配块,块的用户部分填充该值 0xCD,并且每个复盖缓冲区用 0xFD 填充。
,如果内存分配失败,_calloc_dbg 设置 errno 到 ENOMEM ; EINVAL 返回,如果内存需要的数量 (前面提到的包含开销) 超过 _HEAP_MAXREQ。 有关此更改和其他错误代码的信息,请参见 errno、_doserrno、_sys_errlist和_sys_nerr。
有关如何的信息存储在基堆的调试版本中分配,初始化,并管理,请参见 内存管理和调试堆。 有关调用标准堆函数之间的差异的信息与其调试在应用程序的调试版本的版本,请参见 使用调试版本与基版本。
要求
实例 |
必需的头 |
---|---|
_calloc_dbg |
crtdbg.h |
有关更多兼容性信息,请参见中介绍的 兼容性 。
示例
// crt_callocd.c
/*
* This program uses _calloc_dbg to allocate space for
* 40 long integers. It initializes each element to zero.
*/
#include <stdio.h>
#include <malloc.h>
#include <crtdbg.h>
int main( void )
{
long *bufferN, *bufferC;
/*
* Call _calloc_dbg to include the filename and line number
* of our allocation request in the header and also so we can
* allocate CLIENT type blocks specifically
*/
bufferN = (long *)_calloc_dbg( 40, sizeof(long), _NORMAL_BLOCK, __FILE__, __LINE__ );
bufferC = (long *)_calloc_dbg( 40, sizeof(long), _CLIENT_BLOCK, __FILE__, __LINE__ );
if( bufferN != NULL && bufferC != NULL )
printf( "Allocated memory successfully\n" );
else
printf( "Problem allocating memory\n" );
/*
* _free_dbg must be called to free CLIENT type blocks
*/
free( bufferN );
_free_dbg( bufferC, _CLIENT_BLOCK );
}
.NET Framework 等效项
不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例。