_aligned_recalloc_dbg
更改使用 _aligned_malloc
或 _aligned_offset_malloc
分配的内存块的大小,并将内存初始化为 0(仅调试版本)。
语法
void * _aligned_recalloc_dbg(
void * memblock,
size_t num,
size_t size,
size_t alignment,
const char *filename,
int linenumber
);
参数
memblock
当前的内存块指针。
number
元素数量。
size
每个元素的大小(以字节为单位)。
alignment
对齐值,必须是 2 的整数次幂。
filename
指向已请求分配操作的源文件名的指针或 NULL
。
linenumber
请求分配操作所在的源文件中的行数或 NULL
。
返回值
_aligned_recalloc_dbg
将返回指向重新分配的(并且可能已移动的)内存块的 void
指针。 如果大小为零且缓冲区自变量不为 NULL
,或内存不足以将块展开到给定的大小,则返回值为 NULL
。 在第一种情况下,会释放原始块。 在第二种情况下,将不会更改原始块。 返回值将指向适当对齐任何类型的对象的存储的存储空间。 若要获取指向类型而非 void
的指针,请在返回值中使用类型转换。
重新分配内存并更改块对齐是错误的。
备注
_aligned_recalloc_dbg
是 _aligned_recalloc
函数的调试版本。 未定义 _DEBUG
时,每个对 _aligned_recalloc_dbg
的调用都简化为对 _aligned_recalloc
的调用。 _aligned_recalloc
和 _aligned_recalloc_dbg
都可分配基堆中的内存块,但是 _aligned_recalloc_dbg
还提供了几种调试功能:用于测试泄漏的块的用户部分两侧的缓冲区,以及用于确定分配请求的源的 filename
/linenumber
信息。 使用块类型参数跟踪特定分配类型不是对齐分配支持的调试功能。 对齐的分配将显示为 _NORMAL_BLOCK
块类型。
_aligned_recalloc_dbg
将按照比请求大小 (number
* size
) 稍多的空间重新分配指定的内存块,这样请求大小可能会大于或小于最初分配的内存块大小。 额外的空间由调试堆管理器用于链接调试内存块,以及为应用程序提供调试标头信息和覆盖缓冲区。 重新分配可能会将原始内存块移动到堆中的其他位置,并更改内存块的大小。 使用值 0xCD 填充该块的用户部分,使用值 0xFD 填充覆盖缓冲区。
如果内存分配失败,则 _aligned_recalloc_dbg
将 errno
设置为 ENOMEM
;如果所需的内存量(包括之前提到过的开销)超过 EINVAL
,则返回 _HEAP_MAXREQ
。 有关此错误代码和其他错误代码的信息,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
此外,_aligned_recalloc_dbg
将验证其参数。 如果 alignment
不是 2 的幂,则此函数调用的参数句柄无效,如参数验证中所述。 如果允许执行继续,则此函数将返回 NULL
并将 errno
设置为 EINVAL
。
若要了解如何在基堆的调试版本中分配、初始化和管理内存块,请参阅 CRT 调试堆详细信息。 若要了解分配块类型及其使用方式,请参阅调试堆上的块类型。 有关标准堆函数与调试版本之间的差异的信息,请参阅堆分配函数的调试版本。
要求
例程 | 必需的标头 |
---|---|
_aligned_recalloc_dbg |
<crtdbg.h> |
有关兼容性的详细信息,请参阅 兼容性。
库
仅限 C 运行时库的调试版本。