Arrays C语言中文件的矩阵乘法
你好,我有一个作业,我有3个文件a,b和c,其中包含2个矩阵,我必须乘以。在所有a和b中,第一行是数组的大小,下一行是该数组的contentnt。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
#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个小时了,只是一个简单的打字错误