在堆栈上分配大型数组时出现分段错误
当我编译这个简单的C代码时它很好但是在取消注释该行之后它显示了分段错误。 我不知道这有什么问题。 请帮忙。
#include int main() { int arr[10002][10002]; int color[10002]; int neigh; // scanf("%d",&neigh); return 0; }
你用arr
和color
吹着堆栈。 据推测,当您对scanf
的调用被注释掉时,编译器会优化所有这些变量,但是当它出现时,它会尝试在堆栈上分配内存。
使变量成为全局变量,并读取堆栈内存与堆内存。
#include int arr[10002][10002]; int color[10002]; int main() { int neigh; scanf("%d",&neigh); return 0; }
在函数内分配的变量放在堆栈上,堆栈的大小有限。 您可以使用malloc
在(较大的)堆上分配它们。