Он успешно компилируется. Но при запуске на получение значений матрицы он вылетает перестает работать.

#include <stdio.h>

void getmat(int mat[100][100],int m,int n);
void matmul(int mat1[100][100],int mat2[100][100],int m1,int n1,int m2,int 
n2,int matmul[100][100]);
void printmat(int matmul[100][100],int m,int n);

int main(void)
{
    int m1,n1,m2,n2;
    printf("Enter the dimensions of matrix1: ");
    scanf("%d %d",&m1,&n1);
    printf("Enter the dimensions of matrix2: ");
    scanf("%d %d",&m2,&n2);
    int mat1[m1][n1];
    int mat2[m2][n2];
    int matmul1[m1][n2];
    int matmul2[m2][n1];
    printf("For the values of matrix 1\n");
    getmat(mat1,m1,n1);
    printf("For the values of matrix 2\n");
    getmat(mat2,m2,n2);
    if(n1==m2)
    {
        printf("Mat1 x Mat2 is possible.");
        matmul(mat1,mat2,m1,n1,m2,n2,matmul1);
        printf("Mat1 x Mat2 :\n");
        printmat(matmul1,m1,n2);
    }
    else
        printf("Mat1 x Mat2 is not possible.\n");
    if(n2==m1)
    {
        printf("Mat2 x Mat1 is possible.");
        matmul(mat2,mat1,m2,n2,m1,n1,matmul2);
        printf("Mat2 x Mat1 :\n");
        printmat(matmul2,m2,n1);
    }
    else
        printf("Mat2 x Mat1 is not possible.\n");
    return 0;
}   


void printmat(int matmul[100][100],int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("%3d ",matmul[i][j]);
        }
        printf("\n");
    }
}




void getmat(int mat[100][100],int m,int n)
{
    int i,j;
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("Enter element of %dx%d: ",i+1,j+1);
            scanf("%d",&mat[i][j]);
        }
    }
}
void matmul(int mat1[100][100],int mat2[100][100],int m1,int n1,int m2,int 
n2,int matmul[100][100])
{   
    int i,j,k;
    for(i=0;i<m1;i++)
    {
        for(j=0;j<n2;j++)
        {   
            matmul[i][j]=0;
            for(k=0;k<m2;k++)
            {
                matmul[i][j]+=mat1[i][k]*mat2[k][j];
            }
        }
    }
}

Помогите внести любые изменения или оптимизировать этот код. Также еще один способ к этому. Эта ошибка появляется при запуске половины

c
0
Mr NoBoDy 24 Апр 2017 в 18:29

2 ответа

Лучший ответ

Я вижу, что вы настраиваете свои массивы с переменными размерами. Вы должны действительно настроить его как очень большой массив или использовать malloc для правильной настройки массива. Когда вы вызываете подпрограммы обработки, передайте массивы как указатели и используйте размеры в качестве аргументов для настройки ваших ссылок. Следует отметить, что myarray[i, j] является эквивалентом однозначного массива, использующего i*rowsize + j. Когда вы определяете свой массив в подпрограммах как [100, 100], он переходит к [i * 100 + j], который находится за пределами вашего фактического массива.

Это вызывает сбой программы.

Как только вы все правильно рассчитаете, все должно заработать.

-1
sabbahillel 24 Апр 2017 в 18:55

Используйте отладчик

Кроме того, все ваши функции написаны для матрицы 100x100.

Но вы объявляете, что ваши матрицы имеют переменные размеры:

int mat1[m1][n1];
int mat2[m2][n2];
int matmul1[m1][n2];
int matmul2[m2][n1];

Когда вы передаете матрицу 3x3 в функцию, которая ожидает матрицу 100x100, у вас определенно будет плохое время.

enter image description here

4
abelenky 24 Апр 2017 в 15:36
43592134