دوستان گرامی سلام
من یه برنامه با C++ نوشتم که توش از آرایه های دو بعدی استفاده شده. حالا نیازه که تعداد عناصر آرایه رو زیاد کنم، ولی متاسفانه به حد 1000000*10000 که میرسه، دیگه برنامه ام ران نمیشه.
ولی من باید تعداد رو خیلی بیشتر از اینا هم کنم .
چند تا روش مثل تعریف عناصر آرایه خارج از قسمت main()، یا استفاده از اشاره گرها رو امتحان کردم؛ اما در هر بار باز با ارور core dumped مواجه میشم.
نمیدونم دیگه چیکار باید بکنم.
ممنون میشم اگه کمکم کنید.
اینم کدم هست:
/* This programme calculates averages: <X>,<Y>,<X2>,<Y2> & MSD v.s t by "ensemble average" with MAX p=0-0.28*/
#include <iostream>
#include <stdlib.h>
#include <cmath>
#include <fstream>
#include <time.h>
#define step 1000000
#define N 1000
using namespace std;
int main() {
srand48(time(0));
double x,y,X,Y,X2,Y2;
double noise;
ofstream out1("xydN.txt");
ofstream NMSD("NMSD.txt");
static double xns[N+1][step+1], yns[N+1][step+1], d[N+1][step+1];
double XN[step], YN[step], X2N[step], Y2N[step], rN[step], r2N[step];
xns[N+1][1]=1;
yns[N+1][1]=2;
d[N+1][0]=3;
for (int j=1; j<=N; j++)
{
for (int i=1; i<=step; i++)
{
d[j][i]=2*xns[j][i]-3;
out1 <<xns[j][i]<<"\t"<<yns[j][i]<<"\t"<<d[j][i]<<endl;
if (d[j][i]-d[j][i-1]>0)
{
noise=drand48();
if (noise>=0 && noise<0.28)
{
xns[j][i+1]=xns[j][i]+1;
yns[j][i+1]=yns[j][i];
}
else if (noise>=0.28 && noise<0.52)
{
xns[j][i+1]=xns[j][i]-1;
yns[j][i+1]=yns[j][i];
}
else if (noise>=0.52 && noise<0.76)
{
xns[j][i+1]=xns[j][i];
yns[j][i+1]=yns[j][i]+1;
}
else
{
xns[j][i+1]=xns[j][i];
yns[j][i+1]=yns[j][i]-1;
}
}
if (d[j][i]-d[j][i-1]<0)
{
noise=drand48();
if (noise>=0 && noise<0.28)
{
xns[j][i+1]=xns[j][i]-1;
yns[j][i+1]=yns[j][i];
}
else if (noise>=0.28 && noise<0.52)
{
xns[j][i+1]=xns[j][i]+1;
yns[j][i+1]=yns[j][i];
}
else if (noise>=0.52 && noise<0.76)
{
xns[j][i+1]=xns[j][i];
yns[j][i+1]=yns[j][i]+1;
}
else
{
xns[j][i+1]=xns[j][i];
yns[j][i+1]=yns[j][i]-1;
}
}
else
{
noise=drand48();
if (noise>=0 && noise<0.25)
{
xns[j][i+1]=xns[j][i]+1;
yns[j][i+1]=yns[j][i];
}
else if (noise>=0.25 && noise<0.50)
{
xns[j][i+1]=xns[j][i]-1;
yns[j][i+1]=yns[j][i];
}
else if (noise>=0.50 && noise<0.75)
{
xns[j][i+1]=xns[j][i];
yns[j][i+1]=yns[j][i]+1;
}
else
{
xns[j][i+1]=xns[j][i];
yns[j][i+1]=yns[j][i]-1;
}
}
}
}
for (int l=1; l<=step; l+=5) // l=time interval
{
X=0;
Y=0;
X2=0;
Y2=0;
for (int d=1; d<=N; d++)
{
X+=xns[d][l];
Y+=yns[d][l];
X2+=pow((xns[d][l]),2);
Y2+=pow((yns[d][l]),2);
}
XN[l]=X/N;
YN[l]=Y/N;
X2N[l]=X2/N;
Y2N[l]=Y2/N;
rN[l]=sqrt((XN[l]*XN[l])+(YN[l]*YN[l]));
r2N[l]=(X2N[l]+Y2N[l]);
double MSD=r2N[l]-pow(rN[l],2);
NMSD<<l<<"\t"<<XN[l]<<"\t"<<YN[l]<<"\t"<<X2N[l]<<"\t"<<Y2N[l]<<"\t"<<MSD<<endl;
}
out1.close();
NMSD.close();
return 0; }