在堆栈上分配大型数组时出现分段错误

当我编译这个简单的C代码时它很好但是在取消注释该行之后它显示了分段错误。 我不知道这有什么问题。 请帮忙。

#include int main() { int arr[10002][10002]; int color[10002]; int neigh; // scanf("%d",&neigh); return 0; } 

你用arrcolor吹着堆栈。 据推测,当您对scanf的调用被注释掉时,编译器会优化所有这些变量,但是当它出现时,它会尝试在堆栈上分配内存。

使变量成为全局变量,并读取堆栈内存与堆内存。

 #include int arr[10002][10002]; int color[10002]; int main() { int neigh; scanf("%d",&neigh); return 0; } 

在函数内分配的变量放在堆栈上,堆栈的大小有限。 您可以使用malloc在(较大的)堆上分配它们。