今天调试程序,发现当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内存的机器来说似乎有点大了。