标题:急救!二维数组array size too large in function main怎么办?
只看楼主
ypp207
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-3-15
 问题点数:0 回复次数:8 
急救!二维数组array size too large in function main怎么办?
#include"stdlib.h"
void rkt1(double t,double y[],int n,double h,int k,long double z[],void(*f)())
{int i,j,l;
 double a[4],tt,*b,*d;
 b=malloc(n*sizeof(double));
 d=malloc(n*sizeof(double));
 a[0]=h/2.0;a[1]=a[0];a[2]=h;a[3]=h;
 for(i=0;i<=n-1;i++) z[i*k]=y[i];
 for(l=1;l<=k-1;l++)
 {(*f)(t,y,n,d);
  for(i=0;i<=n-1;i++)b[i]=y[i];
  for(j=0;j<=2;j++)
  {for(i=0;i<=n-1;i++)
   {y[i]=z[i*k+l-1]+a[j]*d[i];
    b[i]=b[i]+a[j+1]*d[i]/3.0;
   }
   tt=t+a[j];
   (*f)(tt,y,n,d);
  }
  for(i=0;i<=n-1;i++)
  y[i]=b[i]+h*d[i]/6.0;
  for(i=0;i<=n-1;i++)
  z[i*k+l]=y[i];
  t=t+h;
 }
 free(b);free(d);
 return;
}主程序为;#include <stdio.h>
#include<rkt1.c>
#include<math.h>
main()
{int i,j;
 double t,h,y[3],z[3][2501];
 void rkt1f(double,double[],int,double[]);
 y[0]=-1.0;y[1]=0.0;y[2]=1.0;
 t=0.0;h=0.1;
 rkt1(t,y,3,h,2501,z,rkt1f);
 printf("\n");
 for(i=0;i<=2500;i++)
 {t=i*h;
 printf("t=%5.2f\n",t);
 for(j=0;j<=2;j++)
 printf("y(%d)=%e ",j,z[j][i]);
 printf("\n");
 }
}
void rkt1f(double t,double y[],int n,double d[])
{t=t;n=n;
 d[0]=y[1];
 d[1]=(0.3+9.0*y[2]*y[2])*sin(y[0])*cos(y[0])-(0.3+9.8/1.5)*sin(y[0])-0.4*y[0];
 d[2]=(1.1*cos(y[0])-0.3)/1.2-0.8*sin(1.0*t);
 return;
}
运算后出现array size too large in function main怎么解决?
搜索更多相关主题的帖子: array function main large size 
2008-03-15 20:54
xianshizhe111
Rank: 1
等 级:新手上路
帖 子:1451
专家分:0
注 册:2007-12-8
得分:0 
噢,太累.
2008-03-15 21:33
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
MAIN函数里数组太大```产生的影响``我不知道是为什么``

但是你可以试下把你要定义的数组定义为外部数组``

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-03-15 21:40
ypp207
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-3-15
得分:0 
多谢指教!
在main中,若z[3][2501]能计算出结果,但是二维数组为z[3][3001]时就回出现我说的情况,能用二维数组动态分配解决问题吗?
2008-03-15 21:58
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
得分:0 
这个就不知道了```

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2008-03-15 22:12
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
问题的关键在于实模式下的一个内存段就只有64KB,所以超过64KB的内容就得特殊处理。
TC是16位实模式的,所以只要您使用其它32位以上的编译器就不会这样了。
2008-03-16 10:51
ypp207
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-3-15
得分:0 
能说具体点吗?具体怎样才能改到32位呢?
多谢指教!!!!!!!!!
2008-03-18 19:58
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
还怎么具体呀?
别用TC就没有这个问题了。
2008-03-19 11:09
guimaxingtia
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-8-29
得分:0 
楼上的办法实在是。。。。。。果断换
2013-08-30 23:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-203600-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033347 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved