注册 登录
编程论坛 C++教室

二维数组如何定义?

w2009w 发布于 2015-08-29 14:51, 639 次点击
二维数组这样对吗?
double **A=new double *[(M+1)*(N+1)*(P+1)];
    for(int z=0;z<(M+1)*(N+1)*(P+1);z++)
        A[z]=new double[(M+1)*(N+1)*(P+1)];

    for(i=0;i<(M+1)*(N+1)*(P+1);i++)
        for(j=0;j<(M+1)*(N+1)*(P+1);j++)
            A[i][j]=0;
其中M,N,P的值已知,分别为150,100,32.我在运行程序的时候到这里就出现break运行不下去,能解释一下吗?
我在百度上问,有个人给我的回答是这样的:

这明显的数组太大了A[503283][503283]这么大的数组,肯定运行时错误了。
追问:
7 分钟前
数组的维数大小有明确规定上限吗?我需要的维数实际上比这个还大呢,这还算小的了,要保持维数大小不变,有什么办法可以处理?
追答:
4 分钟前
他两个乘起来就是2.5329e+011这么大的空间,好像一般编译器申请空间都在10的7次幂的级数。
追问:
1 分钟前
那我的问题根本没法实现,我需要的空间真的很大

大家有什么看法,给出来参考参考
6 回复
#2
hjx11202015-08-29 15:28
变长数组不知道行不行
double xxx(int ro, int co, double arr[ro][co]);
#3
rjsp2015-08-29 16:02
首先你这不是二维数组,二维数组的每一个元素都应该是一个一维数组,而你是一个指针

503283 是怎么来的?(150+1)*(100+1)+(32+1) 等于 15284

double [15284][15284] 的尺寸大约是 1.75G bytes。

能不能动态分配 1.75G 的空间,鬼知道呢,肯定是配置高的64位系统能,如果是32位、内存又小(包括虚拟内存),那就悬了。

不知道要做什么东西需要这么大的内存,是不是可以用文件替代,是不是可以用内存映射文件替代,……?
#4
w2009w2015-08-30 23:58
回复 2楼 hjx1120
长数组如何使用,怎么给解释一下嘛!没用过
#5
w2009w2015-08-31 00:02
回复 3楼 rjsp
二维数组在内存中的分配形式嘛!是我说的不清楚,是二维数组在计算机中如何分配内存,做的毕业设计,需要求解如此大的系数方程组
#6
农民工2015-08-31 14:29
和一维数组一样 开辟出连续的空间给你。如果没有这么大的连续空间,就分配失败。
解行列式方程吗?
#7
w2009w2015-08-31 15:09
回复 6楼 农民工
解线性方程组
1