矩阵乘法C语言

时间:2018-04-10 19:03:12

标签: c

所以,我有矩阵乘法的问题。我必须将矩阵的值存储在一个文件中,然后将它们相乘。当我尝试乘以900x900矩阵时出现问题:分段故障(核心转储),但800x800完美运行)。我的部分代码是:创建用于存储的文件:

FILE *A, *B;
int num = atoi(argv[1]);
float a[num][num];
float b[num][num];
A = fopen(argv[2],"r");
B = fopen(argv[3],"r");
for (int i = 0; i < num; ++i)
{
    for (int j = 0; j < num; ++j)
    {
        fscanf(A,"%f",&a[i][j]);
    }
}
for (int i = 0; i < num; ++i)
{
    for (int j = 0; j < num; ++j)
    {
        fscanf(B,"%f",&b[i][j]);
    }
}

所以我没有为矩阵乘法编写函数,因为它可以工作

1 个答案:

答案 0 :(得分:3)

你的两个float可变长度数组占用2 * 900 2 * 4个字节 - 这有点超过6Mb。 VLA通常在堆栈上创建,其大小因系统和进程而异,但在现代桌面系统上通常可能为2到8 Mb。

创建一个堆栈大的数组有些不合理,并且失败并不令人惊讶。