您的位置:首页 > 编程语言 > C语言/C++

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++ 中你必须显式地创建
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐