这里的Parameter是我定义的一个比较大的结构体,我在这里开辟10个没有问题,为什么改成大一点的比如我改成50就出错了。我看提示bad_alloc应该是动态开辟内存没有开出来,可是我在其他工程里可以开出来,在新建的这个工程里开不出来,是vs哪里设置的问题吗?

解决方案 »

  1.   

    Parameter到底有多大,sizeof(Parameter)返回是多少? 
    如果确实很大, 有可能因为内存碎片太多new不出来的,那么就要考虑使用内存映射CreateFileMapping()来实现
      

  2.   

    sizeof(Parameter) 多大 ?
      

  3.   

    我看过了,差不多30M。可是在别的工程里能new出来,这个应该也能吧,是不是配置的问题
      

  4.   

    不一定
    内存管理的机制的问题,  30*50 = 1500M,  因为频繁的释放和分配,你不见得有1500M的连续内存可用
    注意,new出来的是连续内存,但是系统很可能有3G空闲内存,但是不见得能有1G的连续内存
    内存碎片导致的不成功的概率很大
      

  5.   

     可以每一个独立申请
    for(int i=0; i<iMax; i++)
    {
      p[i] = new xxxx
    }
      

  6.   

    我试了下,这样有错误。
    Parameter *par=NULL;
    for(int i=0;i<50;++i)

    par[i]= new Parameter;

      

  7.   

    Parameter *par[50]=NULL; 
    ……
      

  8.   

    Parameter *par[50]=NULL; 
    for(int i=0;i<50;++i)

            par[i]= new Parameter;// 30M 一个

      

  9.   

    谢谢,谢谢大家,解决了。就是这个样子。把win32改成x64,再配置下包含路径和库目录,再把配置属性,常规的平台工具集选visual Studio 2010(v100)就行了。是因为机器是64位的,所以选x64才可以吗?还不太清楚win32和x64区别。要学习的还有很多啊