栈溢出问题!!!求大佬帮帮弟弟

#include <iostream>
using namespace std;

#define MaxInt 10000000000  //定义无限
#define MVNum 3000//最大顶点个数

typedef char VerTexType; //假设顶点的数据类型为字符型
typedef int ArcType;//假设边的权值为整型
typedef struct
{
	VerTexType vexs[MVNum + 1];//顶点表
    ArcType arcs[MVNum + 1][MVNum + 1]; //邻接矩阵,也即二维数组
	//ArcType *arcs[MVNum + 1][MVNum + 1];
    int vexnum, arcnum;//图当前的点数和边数
}AMGraph;

//求最小公倍数
int LCW(int& a,int& b)  //求最小公倍数函数
{
	int temp, i;
	if (a < b)  /*比较大小,使得a中存储大数,b中存储小数*/
	{
		temp = a;
		a = b;
		b = temp;
	}
	for (i = a; i <= a*b; i++)  /*从大数开始寻找满足条件的自然数*/
		if (i%a == 0 && i%b == 0)
		{/*输出满足条件的自然数并结束循环*/
			temp = i;
			break;
		}
	return temp;
}
//图的邻接矩阵表示法
void CreateUDN(AMGraph* G)//创建无向图,采用邻接矩阵表示法
{
	int m;
	cin >> G->vexnum >> m;//输入n和m的值

	for (int i = 1; i <= G->vexnum; i++)
	 G->vexs[i]=i;//依次输入点的信息
	
	for (int i = 1; i <= G->vexnum; i++)   //初始化邻接矩阵,边的权值均设置为最大值
	{
		for (int j = 1; j <= G->vexnum; j++)
			G->arcs[i][j] = MaxInt;
	}
	for (int i = 1; i <= G->vexnum; i++)
		for (int j = 1; j <= G->vexnum; j++)
		{
			int  v1 = i;
			int  v2 = j;//v1和v2为两个点的位置 
			ArcType w;
			if ((v1 - v2)*(v1 - v2) <= m * m)
			{
				w = LCW(v1, v2);//w为边的权值
				G->arcs[v1][v2] = G->arcs[v2][v1] = w;
			}
		}

}

//求最短距离
void Floyd(AMGraph* G) {//Floyd算法求各点之间的最短路
	int n = G->vexnum;
	int i = 1;
	for (int k = 1; k <= n; k++) {
			if (G->arcs[i][k] == MaxInt)continue;
			for (int j = 1; j <= n; j++) {
				if (G->arcs[i][j] > G->arcs[i][k] + G->arcs[k][j])
					G->arcs[i][j] = G->arcs[i][k] + G->arcs[k][j];
		}
	}
}

int main()
{
	AMGraph G;
	CreateUDN(&G);
    Floyd(&G);
	cout << G.arcs[1][G.vexnum];
	return 0;
}

这里是报错:

你能不能给出更充分一些的信息,比如错误信息,错误行等等,也节省回复者的工作量,有助于你更快地解决问题啊

栈内存中不允许开辟 ArcType arcs[MVNum + 1][MVNum + 1];也就是3000*3000的二维数组需要的内存空间过大,请使用动态数组