Arrays C语言中文件的矩阵乘法

Arrays C语言中文件的矩阵乘法,arrays,c,matrix,multidimensional-array,Arrays,C,Matrix,Multidimensional Array,你好,我有一个作业,我有3个文件a,b和c,其中包含2个矩阵,我必须乘以。在所有a和b中,第一行是数组的大小,下一行是该数组的contentnt。c是矩阵乘法的输出。当我运行程序时,我发现了一个分段错误,我似乎找不到问题 #include<stdio.h> #include<stdlib.h> int **arrayA; //unallocated array A int **arrayB; //unallocated array B int **arrayC; //u

你好,我有一个作业,我有3个文件a,b和c,其中包含2个矩阵,我必须乘以。在所有a和b中,第一行是数组的大小,下一行是该数组的contentnt。c是矩阵乘法的输出。当我运行程序时,我发现了一个分段错误,我似乎找不到问题

#include<stdio.h>
#include<stdlib.h>

int **arrayA; //unallocated array A
int **arrayB; //unallocated array B
int **arrayC; //unallocated array C
int rA, cA; //Size of A
int rB, cB; //Size of B
int rC, cC; //Size of C

/*int matrixmultiplication(int *arrayA, int *arrayB, int *arrayC)//Function that multiplice the matrix
{
    for (int i = 0; i < rC; i = i + 1)
        for (int j = 0; j < cC; j = j + 1)
        {
            arrayC[i][j] = 0;
            for (int k = 0; k < cA; k = k + 1)
                arrayC[i][j] = arrayC[i][j] + arrayA[i][k] * arrayB[k][j];
        }

}*/

int main(void)// Main function
{
    //File pointer to A, B and C
    FILE *Aptr;
    FILE *Bptr;
    FILE *Cptr;
    //Opening the files containing the information for the matrix
    Aptr = fopen("/home/au/Desktop/Matrixmulti/a", "r");
    if(Aptr == NULL)
    {
        printf("ERROR!! opening file A");
        exit(1);
    }

    Bptr = fopen("/home/au/Desktop/Matrixmulti/b", "r");
    if(Bptr == NULL)
    {
        printf("ERROR!! opening file B");
        exit(1);
    }

    Cptr = fopen("/home/au/Desktop/Matrixmulti/c", "w");
    if(Cptr == NULL)
    {
        printf("ERROR!! opening file C");
        exit(1);
    }

    //Scan file a for size of matrix a and matrix b
    fscanf(Aptr, "%d", &rA);
    fscanf(Aptr, "%d", &cA);
    fscanf(Bptr, "%d", &rB);
    fscanf(Bptr, "%d", &cB);
    rC = rA;
    cC = cB;
    //Allocating space for the arrays
    arrayA = malloc(rA * sizeof(int*));
        for (int i = 0; i < rA; i++)
        {
            arrayA[i] = malloc(cA * sizeof(int));
        }
    arrayB = malloc(rB * sizeof(int*));
        for (int i = 0; i < rB; i++)
        {
            arrayB[i] = malloc(cB * sizeof(int));
        }
    arrayC = malloc(rC * sizeof(int*));
        for (int i = 0; i < rC; i++)
        {
            arrayA[i] = malloc(cC * sizeof(int));
        }

    //Scan file a for data for matrix a
    for (int i = 0; i < rA; i++)
    {
        for (int j = 0; j < cA; j++)
        {
            fscanf(Aptr, "%d", &arrayA[i][j]);
        }
        
    }
    

    //Scan file b for data for matrix b
    for (int i = 0; i < rB; i++)
    {
        for (int j = 0; j < cB; j++)
        {
            fscanf(Bptr, "%d", &arrayB[i][j]);
        }
    }
    //Matrix multiplication
    for (int i = 0; i < rC; i = i + 1)
        for (int j = 0; j < cC; j = j + 1)
        {
            arrayC[i][j] = 0;
            for (int k = 0; k < cA; k = k + 1)
                arrayC[i][j] = arrayC[i][j] + arrayA[i][k] * arrayB[k][j];
        }
        
    //Print result matrix to file c
    for (int i = 0; i < rC; i++)
    {
        for (int j = 0; j < cC; j++)
        {
            fprintf(Cptr, "%d \t", arrayC[i][j]);
        }
        
    }
    



    //Closing the files
    fclose(Aptr);
    fclose(Bptr);
    fclose(Cptr);
    return 0;
}
#包括
#包括
国际**阿拉亚//未分配数组A
int**arrayB//未分配数组B
国际**阵列//未分配数组C
内特拉,加利福尼亚州//大小
int-rB,cB//B的大小
int rC,cC//C的大小
/*int matrixmultiplication(int*arrayA,int*arrayB,int*arrayC)//对矩阵进行乘法的函数
{
对于(int i=0;i
在调试器下运行你的程序,你会很快发现事情恶化的具体原因。输入错误:
arrayA[i]=malloc(cC*sizeof(int))
应该是
arrayC
@JohnnyMopp谢谢你,我看了3个小时了,只是一个简单的打字错误