Я столкнулся с небольшим количеством проблем в моей программе. Я уверен, что это как-то связано с памятью, но я не могу точно определить точную причину сбоя. В моей программе у меня есть две длинные матрицы с плавающей точкой, которые я хотел бы умножить вместе. Одна матрица имеет размер 7x1 (7 строк и 1 столбец), а другая - 7x7 (7 строк и 7 столбцов). Обе матрицы называются matrixY и matrixY соответственно.
Matrix T:
49244824435.000000 119389046816.250000 39946687622.000000 134033754390.000000 113174866996.000000 272947307571.500000 57145173936.250000
119389046816.250000 289454411315.062500 96845750191.250000 324960870933.750000 274388194250.500000 661757833373.125000 138543299809.062500
39946687622.000000 96845750191.250000 32404329394.000000 108725307556.000000 91805134479.000000 221408041345.500000 46355176893.250000
134033754390.000000 324960870933.750000 108725307556.000000 364823702850.000000 308047197273.000000 742934555194.500000 155537281593.750000
113174866996.000000 274388194250.500000 91805134479.000000 308047197273.000000 260106770582.000000 627313081608.000000 131331845278.500000
272947307571.500000 661757833373.125000 221408041345.500000 742934555194.500000 627313081608.000000 1512933380437.250000 316738287317.125000
57145173936.250000 138543299809.062500 46355176893.250000 155537281593.750000 131331845278.500000 316738287317.125000 66313171264.062500
Matrix Y:
3.000000
3.000000
2.000000
4.000000
3.000000
4.000000
3.000000
Обе матрицы взяты из входного файла наначало моей программы. Я использовал printf, чтобы убедиться, что матрицы на самом деле являются двумерными массивами и хранятся в памяти. Поскольку моя программа довольно длинная, я опубликую фрагмент кода, который относится к умножению. У меня есть две переменные с именем строка и размерность, которые находят строку и размеры первой матрицы.
int main(int argc, char *argv[])
{
int row;
int column;
/*code that takes input from file and scans into matrix*/
/*code that finds dimensions of matrix and stores in a variable **row** and **column***/
/*more code that performs other unrelated tasks*/
/*CREATE PROFUCT MATRIX AND ALLOCATE MEMORY*/
double **productMatrixY;
printf("created product matrix Y: \n");
productMatrixY = (double **)malloc(row*sizeof(double));
for(i = 0; i < row; i++)
{
productMatrixY[i] = malloc(column*sizeof(double)); /*original was column instead of row*/
}
/*Multiply both matrices*/
sum = 0;
for(i = 0; i < row; i++)
{
for(j = 0; j < row; i++) /*originally 'row'*/
{
productMatrixY[i][j] = 0;
for(k = 0; k < column; k++)
{
sum += matrixT[i][k] * matrixY[k][j];
}
productMatrixY[i][j] = sum;
sum = 0;
}
}
printf("\n");
printf("multiplied TRANSPOSE and MATRIX Y\n");
{
productMatrixY[i] = malloc(column*sizeof(double));
}
printf("allocated memory for product matrix Y:\n");
printf("\n");
Код падает, как только начинается умножение. Любая помощь будет оценена. Спасибо:)