Я думаю, что я исправил проблему, но мне пришлось сделать немало отладки из-за большого количества ошибок, поэтому я поставлю ответ на исходный вопрос сверху и отложу все вещи, которые мне пришлось отлаживатьвнизу.
fscanf(file, "%*[.]"); //this is to read the period in the file
fscanf(file,"%d %d", &row2, &col2);//row of second matrix
mat2=malloc(row2 * col2 * sizeof(int*));//create memory for second matrix
Добавив одну строку кода, он начал работать для меня, но он начал работать только из-за отладки ниже.
Поскольку количество вызовов mallocя не представлял число вложенных элементов, которые были проиндексированы, мне пришлось изменить объявление матриц, способ их заполнения и способ их ссылки.
int *mat1,*mat2;
Это объявление должно сделатьследующие правки работают.
//reading data for first matrix
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
fscanf(file, "%d", &(mat1[i*col1 + j]));
}
}
for(i=0; i<row1; i++)
{
for(j=0; j<col1; j++)
{
printf("%d\t",mat1[i*col1 + j]);
}
printf("\n");
}
И, конечно же, для второй матрицы;
//reading data for second matrix
for(i=0; i<row2; i++)
{
for(j=0; j<col2; j++)
{
fscanf(file,"%d",&(mat2[i*col2 + j]));
}
}
for(i=0; i<row2; i++) //check mat2
{
for(j=0; j<col2; j++)
{
printf("%d\t",(mat2[i*col2 + j]));
}
printf("\n");
}
Имейте в виду, что если вы собираетесь ссылаться на массив внутри массива, тогда вам нужно выделять место для другого массива в каждом слоте исходного массива.Я выбрал неинтуитивный подход к матричной арифметике, но код можно дополнить, чтобы можно было легко использовать индексацию по двум массивам.