turbo C编译器报错数组太大怎么办 在VC6.0中,用C语言最大可以建多大的二维数组?? --转
2017-09-28 23:57
686 查看
我用C在VC6.0中数据如下代码: #include<stdio.h> #define N 600 int main(void) { int a ; printf("\nthe array is %d\n",N); return 0; } 当N不是太大时还可以,一旦 b10e N大于600,就会出现警告,甚至 错误,错误如下: Compiling... test.c D:\test.c(5) : warning C4101: 'a' : unreferenced local variable Linking... 错误大概就是说,可能是数组建的太大了??? 我就搞不懂了,才600*600的二维数组,就太大了,我现在要处理一个 4000*4000的矩阵,我应该怎么办?在VC中数据最大可以建到多大? 为什么会存在这种限制? 开到main函数外面,开在里面会因为数组太大而出错. 开在全局,开过10000*10000的都没问题的. |
编译选项里有个链接器选项-> system-> 堆栈保留大小 设置一下就可以了
float[800][800]的空间 800*800*4 = 2.56M,刚好大于默认的预留堆栈2M,所以就会编译出错。
不过还是建议如果不是静态全局数组都动态分配啦
三种方法: 一、建立全局变量 二、使用new或者malloc在堆上申请空间。 三、在设置中提高运行栈的大小。(project->Settings->link->category中选择output->reserve中设定栈大小,最小4Byte) |
我所不明白的是:为什么设成全局变量就能定义大数组了
但是在程序 main()中,如果没有别申请空间,也没设置栈,
就不行呢?
因为全局变量是放在静态存储区的,并不占用栈空间。 |
栈不应该太大
其他语言会隐式地在堆上创建数组(有些语言的数组全部是放在堆上的),在 C/C++ 中你必须显式地创建
相关文章推荐
- C语言学习8:malloc返回的void*类型指针不可以做更改,free双重释放,二维数组的初始化和打印,a和a[0]和a[0][0]的区别,数组指针(*p)[3],指针数组*a[10],动态内存分配版约瑟夫环,动态分配版去空格和逗号处理,二级指针与二维数组互用
- Re: 用FORTRAN90最大可以开多大的数组?
- c语言中数组名代表数组首地址,它的值在运行期间可以改变吗?
- 二维数组首尾相接,象个一条首尾相接带子一样,求所有子数组和的最大值
- 用c语言求一组数组的最大值以及最小值
- 求二维数组的最大子数组
- C语言可以给字符数组赋值的方法
- 最大子数组(C语言)
- 二维数组求最大子数组
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 用n(0)次求一个数组里面最大子数组的和(数组可以输入负数)
- 二维数组的子数组求最大值问题
- 二维数组 子数组和的最大值
- C99 c语言特性 数组可以这样初使化
- How Big can a Python Array Get?——python数组可以到多大?
- error C2057: expected constant expression (C语言中数组的大小可以在程序运行时定义吗? )
- 在N个不同元素的数组A中,同时找到它的最大元素和最小元素,设A中的元素可以直接比较大小
- C语言练习题每练 4 求数组平均,最大,最小数
- 怎么找数组中10个元素最大和最小值
- C语言 通过指针访问一维数组,二维数组,三维数组。