一例二维数组的分段故障 [英] A segmentation fault error with 2D array

查看:18
本文介绍了一例二维数组的分段故障的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有一个奇怪的分段错误。以下代码运行正常

#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 unlimited

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

如果必须使用这种大小的数组,如果由于某种原因更改堆栈大小有问题,则可以将它们设置为动态的,以便它们位于堆而不是堆栈上。

这篇关于一例二维数组的分段故障的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆