int G[1000][1000]定义的位置不同会导致不同的结果?

就是在C语言中定义一个int G[1000][1000]的数组
如果定义在main函数里(函数的后面还有个scanf语句)
结果一运行程序,控制台直接自动结束程序,根本没有获取我的输入
然而我将该数组定义在main函数的外面,执行程序的时候则会正常的进行
问同学说是stackoverflow?求详细的解释

你好,我在我机子上试了没有你所说的情况。ps:while(~scanf("%d%d",&n,&m)) 是不是写错了。。。,为啥要按位取反

你能将你代码贴出来么?我认为不会是stackoverflow,应该是其他问题

 #include <iostream>
#include <cstdio>
#include <cstring>
#define INF 65535
using namespace std;

int G[1007][1007];
int main()
{
 int flag;
 int n,m;
 int x,y,weight;
 int min,v;
 int d[1007];
 int s[1007];
 int ans;
 while(~scanf("%d%d",&n,&m))
 {
  if(n == 0) break;
  flag = 0;
  ans = 0;
  memset(s,0,sizeof(s));
  //初始化图
  for(int i = 1;i <= m;i++)
   for(int j = 1;j <= m;j++)
    G[i][j] = i == j?0:INF;
  //输入每个边的权值
  for(int i = 0;i < n;i++)
  {
   scanf("%d%d%d",&x,&y,&weight);
   if(weight < G[x][y])
    G[x][y] = weight;
  }
  //初始化每个点到的1初始距离
  for(int i = 1;i <= m;i++)
   d[i] = G[1][i];
  s[1] = 1;
  //for循环n-1次->依次选出n-1个点进入s集合
  for(int i = 1;i <= m-1;i++)
  {
   min = INF;
   for(int j = 1;j <= m;j++)
    if(!s[j] && d[j] < min)
     min = d[v = j];
   if(min == INF) {
    flag = 1;
    break;
   }
   s[v] = 1;ans += d[v];
   for(int k = 1;k <= m;k++)
    if(!s[k] && d[k] > G[v][k])
     d[k] = G[v][k];
  }
  if(flag) printf("?\n");
  else printf("%d\n",ans);
 }
 return 0;
}