为啥内存占用正常 new 也会失败

为何内存占用正常 new 也会失败?
    m_saCache = new(std::nothrow) BYTE[CACHE_SIZE];
    if (m_saCache == NULL)
return wlet(FALSE, L"new cache is null.");


这是怎么回事? 搞不懂。。。
------解决思路----------------------
光这样看,new没问题。。。为啥内存占用正常 new 也会失败
------解决思路----------------------
碎片化得太厉害?你先重启下机器,重新建立个项目把代码拷过去,然后试试
------解决思路----------------------
你是VC6.0吗  stackoverflow上有人讨论过

up vote
37
down vote
accepted
VC6 was non-compliant by default in this regard. VC6's new returned 0 (or NULL).

Here's Microsoft's KB Article on this issue along with their suggested workaround using a custom new handler:

Operator new does not throw a bad_alloc exception on failure in Visual C++
If you have old code that was written for VC6 behavior, you can get that same behavior with newer MSVC compilers (something like 7.0 and later) by linking in a object file named nothrownew.obj. There's actually a fairly complicated set of rules in the 7.0 and 7.1 compilers (VS2002 and VS2003) to determine whether they defaulted to non-throwing or throwing new.

It seems that MS cleaned this up in 8.0 (VS2005)—now it always defaults to a throwing new unless you specifically link to nothrownew.obj.

Note that you can specify that you want new to return 0 instead of throwing std::bad_alloc using the std::nothrow parameter:

SomeType *p = new(std::nothrow) SomeType;
This appears to work in VC6, so it could be a way to more or less mechanically fix the code to work the same with all compilers so you don't have to rework existing error handling.