定义double array[a][b] 数组 a=b=800 , 数组大小为800*800*sizeof(double)=800*800*8 bit 近似为4.88MB超过vs默认的1MB,解决方法有以下三种
1.用malloc申请动态内存(推荐)
#include<stdlib.h>
#include<malloc.h>
int a=800,b=800;
double *array=(double *)malloc(a*b*sizeof(double));
// 二维数组和一维数组之间的转化
// array[i][j] <-->array[i+j*a] or array[j+b*i]
//使用完记得释放申请的内存
free(array);
2.修改VS默认的堆栈保留大小,单位bit,这里可以设置成比800*800*8 大的整数即可
参考:visual studio 声明数组太大,导致栈溢出 - 午夜稻草人 - 博客园
3.使用static
#include<stdio.h>
#include<stdlib.h>
static double array[a][b];
在占用内存空间较大的局部数组声明的前面加static,将其从堆栈数据段挪到全局数据段即可避开因局部数组大小超过默认堆栈大小1MB造成程序不能正常运行的问题。