【发布时间】:2013-04-03 14:03:16
【问题描述】:
我有以下生成对称矩阵的函数:
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 值(例如 1000)可以正常工作。
【问题讨论】:
-
这使用 VLA,可变长度数组,在 C++ 中不存在。于是我取出了C++标签。
-
请告诉我们:1) 您正在使用的系统,2) 您正在使用的语言 3) 您正在使用的编译器。除了我无法编译之外,我没有看到任何错误,因为在以下行中,我的 Microsoft 编译器为 A[n][n]n 中的 n 提取了一个常量表达式:“void genMatrix(int n, double A[n].[n ])”。看起来不是 C 语言。
-
@MichaelWalz,这是带有 VLA 的 C,所以至少是 C99。微软编译器从来没有做到这一点。
-
@Jens Gusted:感谢您提供的信息。我也没有做到这一点:-)
-
gcc 编译器,ubuntu 系统
标签: c matrix segmentation-fault