我编写了一个使用HeapAlloc()和HeapFree()连接字符串的函数,我想检查这些函数的返回。但是,如果分配失败,我必须再次尝试分配,直到它工作。怎么做?
我将此问题与this one相关联。
void add_to_buffer(LPTSTR* buffer, LPCTSTR msg) {
// Determine new size
int newSize = 0;
// Allocate new buffer
if (*buffer == NULL)
newSize = _tcsclen(msg) + 1;
else
newSize = _tcslen(*buffer) + _tcsclen(msg) + 1;
// Do the copy and concat
if (*buffer == NULL)
{
*buffer = (LPTSTR)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, newSize * sizeof(*buffer));
_tcsncpy_s(*buffer, newSize, msg, _tcsclen(msg));
}
else
{
*buffer = (LPTSTR)HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, *buffer, newSize * sizeof(*buffer));
_tcsncat_s(*buffer, newSize, msg, _tcsclen(msg));
}
}
答案 0 :(得分:6)
但是,如果分配失败,我必须再次尝试分配,直到它工作。怎么做?
不,如果分配失败,那就结束了。此时您应该终止该过程。根本没有理由相信随后的分配会成功。尝试一次又一次地获得帮助,计算机不能那样工作。一旦你达到低内存状态,你就会发现左,右和中心问题。最安全的行动就是中止。
现在,可以编写可以在低内存状态下存活的程序。但这需要非常仔细地设计和处理内存分配。它要求程序的所有部分都遵循该设计。你的计划不具备这种性质。