分配失败时该怎么办?

0 c string memory-management

我编写了一个函数,通过使用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)

Dav*_*nan 6

但是,如果分配失败,我必须再次尝试分配,直到它工作.怎么做?

不,如果分配失败,那就结束了.此时您应该终止该过程.完全没有理由相信随后的分配会成功.一次又一次地尝试无济于事,计算机不能那样工作.一旦你达到低内存状态,你可以预见左,右和中心的问题.最安全的行动是中止.

现在,可以编写可以在低内存状态下存活的程序.但这需要非常仔细地设计和处理内存分配.它要求程序的所有部分都遵循该设计.你的计划不具备这种性质.