为什么我这个代码还没输入数据就结束了?

#include<stdio.h>
#include<math.h>

int main()
{
	int n,sum;
	scanf("%d",&n);
	int deep=log2(n+1);
	int tree[10000][10000];
	int sw[10000];
	for(int i=0;i<deep;i++)
	{
		sum=0;
		for(int j=0;j<pow(i,2);j++)
		{
			scanf("%d",&tree[i][j]);
			sum+=tree[i][j];
		}
		sw[i]=sum;
	}
	int max=sw[0];
	int c;
	for(int i=1;i<deep-1;i++)
	{
		if(sw[i]>=max)
		{
			max=sw[i];
		}
	}
	for(int i=0;i<deep;i++)
	{
		if(sw[i]==max)
		{
			c=i;
			break;
		}
	}
	printf("%d",c);
	return 0;
}

请大佬帮忙解答一下!

这个:int tree[10000][10000];

改成:int tree[100][100];

原因:数组的初始化大小超过了编译器的默认stack大小。

int tree[10000][10000] 约为400M大小。

栈空间的大小是有限制的,如果需要的内存比较大,可以用malloc或者new申请内存放到堆。

也可以放在函数外也就是全局变量