// 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没有说明数组溢出的,内存是肯定不够了。
有没有其他好的方法解决这个问题呢?

解决方案 »

  1.   

    大家有没有看明白呢?m_aPressure是一个CArray数组,在使用它之前,先一次性为它分配nPresNum个元素的空间。
    现在的问题是nPresNum不是很大是程序没有问题,当nPresNum很大是,比如1443111137这么大,程序就在m_aPressure.SetSize(nPresNum);处出错了。所以我想知道CArray数组可以一次性最多分配多少个元素?如果如 freelove1(心如止水) 那样说的是16 位无符号整数,那么只能65536个空间,显然不满足我的程序要求,那么有没有其他好的方法呢?
      

  2.   

    内存不够?
    是不是堆栈溢出?如果你在堆中分配内存,应该是很难溢出的(Windows会使用虚拟内存)。如果是堆栈溢出,你可以试试下面两种办法:
    一:增大默认的堆栈大小,VC默认的堆栈大小是1M,你可以通过修改编译选项来增大堆栈的大小。
    二:在堆中分配内存,可能需要修改你的程序,不再使用CArray,而使用其他的容器,如:List。
      

  3.   

    请问 shootingstars(有容乃大,无欲则刚) ,什么是“堆栈溢出“?
    什么情况下堆栈溢出呢?我看了msdn,函数原型为
    void SetSize( int nNewSize, int nGrowBy = -1 );
    throw( CMemoryException );
    我又看了int, unsigned int 长度多为4 bytes,2的32次方为
    2147483648,大于1443111137,按理说不应该出问题。 
    ??????
      

  4.   

    我这里没有MSDN,不知道CArray是在堆中或者在栈中申请内存,不过我想CArray应该是在栈中申请的内存。
    不知道你出错信息是什么?是stack overflow吗?另:你说的整数范围与堆栈溢出没有关系。堆栈是一种内存,符合先进后出原则,主要用于分配局部变量,函数地址压栈等。VC默认的是1M。
      

  5.   

    不好意思,打错了:
    我这里没有MSDN,不知道CArray是在堆中或者在栈中申请内存,不过我想CArray应该是在(堆)中申请的内存。
    否则CArray不能改变大小。
      

  6.   

    不用SetSize呢~~!!把没一个数据add进去让数组自己根据数据的多少来申请内存~~!!!
      

  7.   

    1443111137 is 1.4 G. 1.4 * sizeof(float) = 5.6 G.On Win32 system, the maximum single block of memory you can allocate is around 1.4 G bytes.If you really want such a large size, move to 64-bit platforms.Or change your design.
      

  8.   

    谢谢 shootingstars(有容乃大,无欲则刚) ,谢谢所有回答问题的兄弟们!不过我到现在还是没有解决这个问题。m_aPressure是一个类成员变量,需要在该类某个成员函数中一次性的为他分配好所有的元素空间,以避免不停的分配空间造成程序运行速度下降。我不知道在类成员函数中给类成员变量分配空间属于堆还是栈。还有请问FengYuanMSFT(袁峰 www.fengyuan.com),如果我不可能移植到64位机器上,请问有没有其他好的设计方法来避免大容量数组呢?
      

  9.   

    呵呵,还是袁大侠细心,你竟然想一次分配5.6G的内存,在Win32下是不可能的。
    或许你只能每次少分配一些,真正需要使用的时候再分配。
      

  10.   

    > 请问有没有其他好的设计方法来避免大容量数组呢?Only you know your problem. So you need to go back to your original problem and figure out why such a big array is needed in the first place.