c - 二维数组的段错误

标签 c segmentation-fault

有一个奇怪的段错误。以下代码运行良好

#include <stdlib.h> 
#include <stdio.h>
main()
    {
    int matrixSize = 1000;
    int i,j;

    double a[matrixSize][matrixSize];
    for (i = 0; i < matrixSize; i++)
        for (j = 0; j < matrixSize; j++)
            a[i][j] = rand() % 10;

        double b[matrixSize][matrixSize];
    for (i = 0; i < matrixSize; i++)
        for (j = 0; j < matrixSize; j++)
            b[i][j] = rand() % 10;
    return 0;
}

但是当我尝试再初始化一个二维数组时,出现“段错误”异常:

#include <stdlib.h>
#include <stdio.h>
main()
{
    int matrixSize = 1000;
    int i,j;

    double a[matrixSize][matrixSize];
    for (i = 0; i < matrixSize; i++)
        for (j = 0; j < matrixSize; j++)
            a[i][j] = rand() % 10;

    double b[matrixSize][matrixSize];
    for (i = 0; i < matrixSize; i++)
        for (j = 0; j < matrixSize; j++)
            b[i][j] = rand() % 10;

    return 0;
}

潜在原因是什么?

最佳答案

您很可能超出筹码量。

在您用来运行它的终端中,尝试输入

ulimit -s 无限

然后重新运行,假设您在使用 bash(或 sh)的 Linux 系统上。

如果你必须使用那个大小的数组,你可以使它们动态化,这样如果由于某种原因改变堆栈大小有问题,它们就在堆上而不是堆栈上。

关于c - 二维数组的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556242/

相关文章:

c++ - 如何在苹果的 AudioUnit 3D Mixer 上设置总线?

c++ - IUnknown 中的 addref 和 release,它们实际上是做什么的?

调用必须有指针 - CCS 问题

c - 从 C 中的链接列表中删除时出现重复段错误

c - 段错误从函数返回字符串数组

c - Ruby的C源码中,Ruby运算符 `=`是在哪里定义的?

c++ - C/C++ 之间具有不同语义的相同语法

c - 指针为本地时出现段错误

c++ - 无法使用 OpenCV 打开两个摄像头 - 多线程摄像头读取

c++ - 字符串、调试和段错误齐头并进