它成功编译。
但是在运行获取矩阵值时,它会崩溃,停止工作。

#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];
            }
        }
    }
}

帮助进行任何更改或优化此代码。
还有另一种方法。
This error shows up at running a half

最佳答案

我看到你正在用不同的大小设置数组。您应该将它设置为一个非常大的数组,或者使用malloc正确地设置数组。调用处理例程时,将数组作为指针传递,并将大小用作参数,以便设置引用。您应该注意myarray[i, j]相当于使用i*rowsize + j的单值数组。当您在子例程中将数组定义为[100,100]时,它将转到实际数组边界之外的[i*100+j]。
这会导致程序崩溃。
一旦你把每件事都计算好了,它就会起作用。

关于c - 为什么该程序在运行时停止工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43592134/

10-09 09:03