_realloc_dbg
通过移动和/或调整块的大小重新分配一个指定堆上的内存块(仅限调试版本)。
语法
void *_realloc_dbg(
void *userData,
size_t newSize,
int blockType,
const char *filename,
int linenumber
);
参数
userData
指向之前分配的内存块的指针。
newSize
重新分配块的请求大小(字节)。
blockType
重新分配块的请求类型:_CLIENT_BLOCK
或 _NORMAL_BLOCK
。
filename
指向请求 realloc
操作的源文件名的指针或 NULL
。
linenumber
源文件中请求 realloc
操作的行号或 NULL
。
仅当已显式调用 _realloc_dbg
或已定义 _CRTDBG_MAP_ALLOC
预处理器常数时,才可使用 filename
和 linenumber
参数。
返回值
成功完成时,此函数将返回指向重新分配的内存块的用户部分的指针、调用新的处理程序函数,或者返回 NULL
。 有关返回行为的完整说明,请参阅以下“备注”部分。 若要详细了解如何使用新的处理程序函数的,请参阅 realloc
函数。
备注
_realloc_dbg
是 realloc
函数的调试版本。 未定义 _DEBUG
时,每个对 _realloc_dbg
的调用都简化为对 realloc
的调用。 realloc
和 _realloc_dbg
都可重新分配基堆中的内存块,但是 _realloc_dbg
还包含几种调试功能:用于测试泄漏的块的用户部分两侧的缓冲区、用于跟踪特定分配类型的块类型参数,以及用于确定分配请求的源的 filename
/linenumber
信息。
_realloc_dbg
将使用比请求的 newSize
稍多的空间重新分配指定的内存块。 newSize
可能会大于或小于最初分配的内存块的大小。 额外空间将由调试堆管理器用于链接调试内存块,以及提供具有调试标头信息的应用程序和覆盖缓冲区。 重新分配可能会导致将原始内存块移动到堆中的其他位置,也可能会导致内存块的大小发生更改。 如果移动内存块,将覆盖原始块中的内容。
如果内存分配失败,或者如果所需的内存量(包括之前提到过的开销)超过 _realloc_dbg
,则 errno
将 ENOMEM
设置为 _HEAP_MAXREQ
。 有关此错误代码和其他错误代码的信息,请参阅 errno
、_doserrno
、_sys_errlist
和 _sys_nerr
。
若要了解如何在基堆的调试版本中分配、初始化和管理内存块,请参阅 CRT 调试堆详细信息。 若要了解分配块类型及其使用方式,请参阅调试堆上的块类型。 若要了解标准堆函数与调试版本之间的区别,请参阅堆分配函数的调试版本。
要求
例程 | 必需的标头 |
---|---|
_realloc_dbg |
<crtdbg.h> |
有关兼容性的详细信息,请参阅 兼容性。
库
仅限 C 运行时库的调试版本。
示例
请参阅 _msize_dbg
文章中的示例。