为什么这个程序在运行时停止工作?

时间:2017-04-24 15:29:54

标签: c

成功编译。 但是在获得矩阵值时,崩溃就会停止工作。

#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

2 个答案:

答案 0 :(得分:4)

使用调试器

此外,您的所有功能都是为了100x100 matricies而编写的。

但是你声明你的matricies有可变的大小:

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

当您将3x3矩阵传递给期望100x100矩阵的函数时,您肯定会遇到不好的时间。

enter image description here

答案 1 :(得分:-1)

我看到你正在设置具有可变大小的数组。您应该将其设置为一个非常大的数组或使用malloc来正确设置数组。调用处理例程时,将数组作为指针传递,并使用size作为参数来设置引用。您应该注意myarray[i, j]相当于使用i*rowsize + j的单值数组。当您在子程序中将数组定义为[100,100]时,它将转到[i * 100 + j],这超出了实际数组的范围。

这会导致程序崩溃。

一旦你真正正确地计算了一切,它应该可以工作。