CDWordArray::SetSize异常

来源:互联网 发布:财务费用的算法 编辑:程序博客网 时间:2024/06/05 20:58

今天调试程序,发现当CDWordArray::SetSize参数为0xFFFFFFFF(DWORD最大值)时程序会崩溃。

后来看了下SetSize的原型,以为将参数改成int的最大值0x7FFFFFFF就可以了。

改了后发现还是不行,最后定位到发生异常处:

ASSERT(nNewSize <= SIZE_T_MAX/sizeof(DWORD));

——位于Microsoft Visual Studio/VC98/MFC/SRC/ARRAY_D.CPP中CDWordArray::SetSize

原来SetSize的参数最大值应该是0xFFFFFFFF(DWORD最大值)/sizeof(DWORD)。

然后将SetSize的参数改为0xFFFFFFFF/sizeof(DWORD),发现还是会崩溃,定位到发生异常处:

m_pData = (DWORD*) new BYTE[nNewSize * sizeof(DWORD)];

原来new最大能分配的内存要取决于机器的内存(包括虚拟内存)以及操作系统,而0xFFFFFFFF个字节=4GB,这对于我1G内存的机器来说似乎有点大了。