数组的大小问题
如下一段代码,编译链接都可以通过,但运行时就报错,为什么?
若把数组大小变为64735,运行时不报错,但是没有任何输出。
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long int i,N;
N=64736;
double A[2][64736];
for(i=0;i <N;i++)
{
A[0][i]=0.0;
A[1][i]=0.0;
}
system( "cls ");
printf( "The original data,Ak:\n ");
for(i=0;i <N;i++)
printf( "%4lu:%15.9f %16.9ei\n ",i,A[0][i],A[1][i]);
return 0;
}
[解决办法]
#pragma comment(linker, "/STACK:65536,6553600 ")//加上这句
int _tmain(int argc, _TCHAR* argv[])
{
unsigned long int i,N;
N=64736;
double A[2][64736];
for(i=0;i <N;i++)
{
A[0][i]=0.0;
A[1][i]=0.0;
}
//system( "cls ");
printf( "The original data,Ak:\n ");
for(i=0;i <N;i++)
printf( "%4lu:%15.9f %16.9ei\n ",i,A[0][i],A[1][i]);
return 0;
}
主要是你程序中栈不够用了,建议用堆,不过加上我写的那句也可以
[解决办法]
double A[2][64736];
====================================
这个占用的字节数超过1M,可能导致栈溢出了。
不知道楼主用的是什么编译器,VC,如果你不去手工设它,它生成出来的程序默认的栈大小是1M。
[解决办法]
堆
double (*A)[64736] = new double[2][64736];