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

sch*_*ger 5 c segmentation-fault

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

#include<stdio.h>
int main()
    {
    int arr[10002][10002];
    int color[10002];
    int neigh;
 // scanf("%d",&neigh);
    return 0;
    }
Run Code Online (Sandbox Code Playgroud)

ta.*_*.is 12

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

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

#include<stdio.h>

int arr[10002][10002];
int color[10002];

int main()
{
    int neigh;
    scanf("%d",&neigh);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)


Sco*_*son 5

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