我编写了一个函数,通过使用HeapAlloc()和HeapFree()来连接字符串,我想检查这些函数的返回.但是,如果分配失败,我必须再次尝试分配,直到它工作.怎么做 ?
我将这个问题与这个问题联系起来.
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));
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果分配失败,我必须再次尝试分配,直到它工作.怎么做?
不,如果分配失败,那就结束了.此时您应该终止该过程.完全没有理由相信随后的分配会成功.一次又一次地尝试无济于事,计算机不能那样工作.一旦你达到低内存状态,你可以预见左,右和中心的问题.最安全的行动是中止.
现在,可以编写可以在低内存状态下存活的程序.但这需要非常仔细地设计和处理内存分配.它要求程序的所有部分都遵循该设计.你的计划不具备这种性质.