矩阵生成器 - C中的分段错误

时间:2013-04-03 14:03:17

标签: c matrix segmentation-fault

我有以下函数用于生成对称矩阵:

void genMatrix(int n, double A[n][n])
 {

int i,j;
int count=0;
for (i=0; i<n; i++)
for (j=i+1; j<n; j++)
    {
    count++;
    A[i][j]=count;
    A[j][i]=count;
    }

 }

当我用这些参数调用函数时:

int n = 10000;
double A[n][n];
genMatrix(n,A);

它给了我一个分段错误,我不明白为什么。我也尝试只用1个值填充矩阵,但它不会改变任何东西。 可能是什么问题呢? n值较小的n值就可以了。

5 个答案:

答案 0 :(得分:5)

你可能只是在这里得到一个堆栈溢出。该数组太大,无法放入程序的堆栈地址空间。

如果你在堆上分配数组,你应该没问题,假设你的机器有足够的内存。

答案 1 :(得分:1)

您是否尝试在堆栈上创建400 MB的数组?这很难奏效。大多数现代操作系统的堆栈范围为1到4兆字节。

答案 2 :(得分:0)

这会在函数的“堆栈”上分配一个非常大的矩阵。这不是一个好主意,你有一个“stackoverflow”。

答案 3 :(得分:0)

好吧,看起来您的数组太大而无法放入程序的堆栈地址空间。因为它的大小是

  

381.47 MB​​

它太大了,例如windows只给你

  

1MB

默认情况下

堆叠

答案 4 :(得分:0)

您正在尝试创建大小为800MB的自动变量(假设double为64位)。在大多数平台上,自动变量是在堆栈上创建的,并且该堆栈的总大小通常只有几兆字节。分配任何太大的东西都会导致堆栈溢出和(如果幸运的话)分段错误。最好动态分配大型对象。