// CArray<REAL,REAL> m_aPressure;//欲求等压值的压力数组
for(i=0;i<m_nPointNum;i++)
{
if(dMaxP<m_pGridNode[i].p) dMaxP=m_pGridNode[i].p;
if(dMinP>m_pGridNode[i].p) dMinP=m_pGridNode[i].p;
} nPresNum=int((dMaxP-dMinP)/m_dPIntval)+1;
m_aPressure.SetSize(nPresNum);//error nPresNum = 1443111137查偏了msdn没有说明数组溢出的,内存是肯定不够了。
有没有其他好的方法解决这个问题呢?
for(i=0;i<m_nPointNum;i++)
{
if(dMaxP<m_pGridNode[i].p) dMaxP=m_pGridNode[i].p;
if(dMinP>m_pGridNode[i].p) dMinP=m_pGridNode[i].p;
} nPresNum=int((dMaxP-dMinP)/m_dPIntval)+1;
m_aPressure.SetSize(nPresNum);//error nPresNum = 1443111137查偏了msdn没有说明数组溢出的,内存是肯定不够了。
有没有其他好的方法解决这个问题呢?
现在的问题是nPresNum不是很大是程序没有问题,当nPresNum很大是,比如1443111137这么大,程序就在m_aPressure.SetSize(nPresNum);处出错了。所以我想知道CArray数组可以一次性最多分配多少个元素?如果如 freelove1(心如止水) 那样说的是16 位无符号整数,那么只能65536个空间,显然不满足我的程序要求,那么有没有其他好的方法呢?
是不是堆栈溢出?如果你在堆中分配内存,应该是很难溢出的(Windows会使用虚拟内存)。如果是堆栈溢出,你可以试试下面两种办法:
一:增大默认的堆栈大小,VC默认的堆栈大小是1M,你可以通过修改编译选项来增大堆栈的大小。
二:在堆中分配内存,可能需要修改你的程序,不再使用CArray,而使用其他的容器,如:List。
什么情况下堆栈溢出呢?我看了msdn,函数原型为
void SetSize( int nNewSize, int nGrowBy = -1 );
throw( CMemoryException );
我又看了int, unsigned int 长度多为4 bytes,2的32次方为
2147483648,大于1443111137,按理说不应该出问题。
??????
不知道你出错信息是什么?是stack overflow吗?另:你说的整数范围与堆栈溢出没有关系。堆栈是一种内存,符合先进后出原则,主要用于分配局部变量,函数地址压栈等。VC默认的是1M。
我这里没有MSDN,不知道CArray是在堆中或者在栈中申请内存,不过我想CArray应该是在(堆)中申请的内存。
否则CArray不能改变大小。
或许你只能每次少分配一些,真正需要使用的时候再分配。