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

时间:2011-07-10 11:03:41

标签: c segmentation-fault

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

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

2 个答案:

答案 0 :(得分:12)

你正在用arrcolor吹嘘筹码。大概是当你对scanf的调用被注释掉时,编译器会优化所有这些变量,但是当它出现时它会尝试在堆栈上分配内存。

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

#include<stdio.h>

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

int main()
{
    int neigh;
    scanf("%d",&neigh);
    return 0;
}

答案 1 :(得分:5)

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