我一个程序,数值非常多,定义了一个double x[16][9600]的数组,编译可以通过,运行程序(调试时)时,老是出现错误,调试中提示“stack overflow”改成double x[16][4800]就可以,自己尝试中发现超过7500多就不行了,怎么办啊?大家给点建议。
我用两个数组double x[16][4800];
double y[16][4800];
也有同样的错误,郁闷!
但是我的确需要这么大的数组啊!!!!
急!!!!!!

解决方案 »

  1.   

    使用静态的
    static double x[16][9600];
      

  2.   

    setting->link
    选category=Output
    填大数到stack alloc..中去
      

  3.   

    用double* x = new double[16*4800]就不会溢出了,不过维数要自己转换一下
      

  4.   

    在堆中申请数据全局定义或者用new来分配
      

  5.   

    一个由c/C++编译的程序占用的内存分为以下几个部分
    1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
    2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
    3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
    4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
    5、程序代码区—存放函数体的二进制代码。 
    stack在编译的时候就由编译器指定了大小,所以在使用大量内存的时候,最好不要在stack中申请,容易(栈)空间不足导致程序运行中产生非常奇怪的错误,特别是多线程的程序。
      

  6.   

    younggle(洋溢) 
    头文件中定义
    static double y1[16][9600];//编译出错:
    Linking...
    Sp.obj : error LNK2001: unresolved external symbol "public: static double (* CSample::y1)[9600]" (?y1@CSample@@2PAY0CFIA@NA)
    Debug/SampleFZ.exe : fatal error LNK1120: 1 unresolved externals
    Error executing link.exe.2、CPP中定义:
    error C2373: 'y1' : redefinition; different type modifiers
            c:\program files\microsoft visual studio\vc98\include\math.h(435) : see declaration of 'y1'
    D:\SampleFZ\Sp.cpp(117) : error C2109: subscript requires array or pointer type
    根本就没有重复定义啊!!!
      

  7.   

    vcmute(横秋) 
    你说的方法好像也不行啊!!
      

  8.   

    栈的最大默认好像是2M,你定义的数组已经超出了
    大的数据量,你可以在堆中分配,用malloc还有就是定义成静态变量,静态变量是放在全局数据段中,并没有放在栈中static double y1[16][9600];//
    是定义静态数组的,并没有错误而上面你的错误是因为你把定义放在了头文件中,造成了重复定义你可以在cpp中static double y1[16][9600];//定义,在h中extern static double y1[16][9600];//声明
      

  9.   

    fatal error C1126: '2G' : automatic allocation exceeds 
    默认这样也行:double y[2047*1024*1024][511*1024*1024]={0};
      

  10.   

    还是看看你其他部分有无错误的内存分配吧。
    我 double x[1600][9600];都可以,使你的100倍!
      

  11.   

    setting->link
    选category=Output
    stack alloc..中填0 试试。
      

  12.   

    谢谢回复人: vcmute(横秋) ( ) 信誉:100 !搞定