我一个程序,数值非常多,定义了一个double x[16][9600]的数组,编译可以通过,运行程序(调试时)时,老是出现错误,调试中提示“stack overflow”改成double x[16][4800]就可以,自己尝试中发现超过7500多就不行了,怎么办啊?大家给点建议。
我用两个数组double x[16][4800];
double y[16][4800];
也有同样的错误,郁闷!
但是我的确需要这么大的数组啊!!!!
急!!!!!!
我用两个数组double x[16][4800];
double y[16][4800];
也有同样的错误,郁闷!
但是我的确需要这么大的数组啊!!!!
急!!!!!!
解决方案 »
- CTreeCtrl 如何禁止编辑节点?
- overlapped socket
- 编译器出了点问题,没找到具体解决办法,特来这里发问
- ocx中修改了,怎么再次加载会出问题啊
- 大家平时用的文本编辑工具能否实现一下如下的小功能?
- 问下IsIconic()后面的代码有什么实际意义
- 怎样加载JPG图像资源在窗口中
- 如何在窗口最大化后取消双击窗口即恢复的功能 及其 取消恢复按钮?
- 如何在我的类中定义一个enum?
- 请问使用ATL写的控件如何调用MFC扩展DLL(MFC Extension DLL)? 只要解决,立刻给分!!
- 如何让托盘图标 动态 的 显示数字 ?
- 求助....用VC++MFC开发基于POP3协议的邮件接收程序的乱码问题
static double x[16][9600];
选category=Output
填大数到stack alloc..中去
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
stack在编译的时候就由编译器指定了大小,所以在使用大量内存的时候,最好不要在stack中申请,容易(栈)空间不足导致程序运行中产生非常奇怪的错误,特别是多线程的程序。
头文件中定义
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
根本就没有重复定义啊!!!
你说的方法好像也不行啊!!
大的数据量,你可以在堆中分配,用malloc还有就是定义成静态变量,静态变量是放在全局数据段中,并没有放在栈中static double y1[16][9600];//
是定义静态数组的,并没有错误而上面你的错误是因为你把定义放在了头文件中,造成了重复定义你可以在cpp中static double y1[16][9600];//定义,在h中extern static double y1[16][9600];//声明
默认这样也行:double y[2047*1024*1024][511*1024*1024]={0};
我 double x[1600][9600];都可以,使你的100倍!
选category=Output
stack alloc..中填0 试试。