C中的分段错误

soo*_*bus 3 c stack-overflow gcc segmentation-fault

我需要用0填充二维数组.但编译后的程序会出现此错误.怎么了?

int main()
{
    int vert[1001][1001];
    int hor[1001][1001];
    int dudiag[1416][1416];
    int uddiag[1416][1416];
    int n, k, m;
    int row, col;
    int i, j;
    int answer = 0;

    for(i = 0; i <= 1000; i++){
        for(j = 0; j <= 1000; j++){
            vert[i][j] = 0;
            hor[i][j] = 0;
        }
    }
...
}
Run Code Online (Sandbox Code Playgroud)

当循环被注释掉时,它可以正常工作.

das*_*ght 8

问题是你试图在自动存储中分配太多内存(堆栈中的AKA).当您注释掉循环时,编译器会优化分配以及现在未使用的变量,因此您不会崩溃.

您需要将分配更改为静态或动态内存(AKA"堆")以解决此问题.由于问题在于内部main,因此制作阵列static将是一个合适的选择.

int main()
{
    static int vert[1001][1001];
    static int hor[1001][1001];
    static int dudiag[1416][1416];
    static int uddiag[1416][1416];
    ...
}
Run Code Online (Sandbox Code Playgroud)

在除了main你可以使这些数组动态的函数之外,使用malloc/ 分配它们calloc,然后free在程序使用它们之后分配它们.