大家好:
       我的本意是想定义3个double型的数组,大小有2000000,编译时大了。
       我这样解决:
           double *p1=(double*)malloc(sizeof(double)*2000000);
  double *p2=(double*)malloc(sizeof(double)*10000);
  double *p3=(double*)malloc(sizeof(double)*10000);       最后释放
           free(p1);
           free(p2);
           free(p2);
       程序运行时有一个警告。好像有什么问题。
       现在我的问题是:malloc函数好像不一定能申请内存成功,如果不成功,我怎样解决这个问题?
       谢谢大家!望高手指点!

解决方案 »

  1.   

    double *p1=(double*)malloc(sizeof(double)*2000000);
    if(NULL == p1)
    {
        不成功处理;
    }
    其他类似。
      

  2.   

    没用过这么大的,刚new了8000000个,好像没问题
      

  3.   

    引入头文件assert.h
    使用宏定义函数assert(int expression)
    如果表达式的值为假,即0,在这里就是表示内存未分配成功,就会报错。
    一般咱们在写程序的时候最好是在分配内存之后,用这个函数做个判断,以免产生不必要的麻烦!
      

  4.   

    这样看看,应该没问题//分配内存
    double *p1=(double*)GlobalAlloc(GMEM_ZEROINIT, sizeof(double)*2000000);
    double *p2=(double*)GlobalAlloc(GMEM_ZEROINIT, sizeof(double)*10000);
    double *p3=(double*)GlobalAlloc(GMEM_ZEROINIT,sizeof(double)*10000);
    //释放内存
    GlobalFree((HGLOBAL)p1);
    GlobalFree((HGLOBAL)p2);
    GlobalFree((HGLOBAL)p3);
      

  5.   

    1.你把数组设为全局数组。
    2,内存最大堆为1G,需要超过就改用64bit的操作系统,
    如,windows sever 2003 64bit, 2、3G我都new过。
      

  6.   

    理论上,Windows 2K 以上的系统,每个进程最大可分配2G作为应用层内存空间,同时最大可分配2G作为内核进程管理内存的空间。合起来应该是一个进程最大有4G内存空间(包括应用层和内核层),不过因为系统内核部分与应用层部分是分开操作的,所以对于单一的应用层程序来说,理论上每个进程最大支持到2G,这种内存空间包括物理内存和虚拟内存。
      

  7.   

    通过new/malloc理论上好像一次可以申请1G以内的内存,但是也和你电脑当前内存的使用情况有关,这这点内存不是很大,我以前一次申请过0.7G的内存。在处理图像的时候用到的
      

  8.   

    没有习惯new这么大的都是用多少new多少