首页 > 解决方案 > 我收到错误“问题导致程序停止正常工作。Windows 将关闭程序并在找到解决方案时通知您”

问题描述

我有一个关于两个矩阵乘积的书面 ac 程序。当我编译时我发现没有错误,但当我运行它时我发现上述错误。我尝试了 youtube 视频建议的多种解决方案。但没有任何效果。我有盗版 Windows我的电脑上安装了 10 个副本。我在代码块 20.03上运行程序 这是程序:

#include<stdio.h>
int main()
{
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
    printf("Enter the rows and columns Of matrix a and b(r1,c1,r2,c2):");
    scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
    printf("Input matrices elements");
    int i,j;
    printf("Input elements of matrix a:");
    for(i=0;i<r1;i++){
        for(j=0;j<c1;j++)
        scanf("%d",&a[i][j]);
    }
    printf("Input elements of matrix b:");
    for(i=0;i<r2;i++){
        for(j=0;j<c2;j++)
        scanf("%d",b[i][j]);
    }
    printf("Matrix a is:\n");
    for(i=0;i<r1;i++){
        for(j=0;j<c1;j++)
        printf("%d ",a[i][j]);
    }
    printf("Matrix b is:\n");
    for(i=0;i<r2;i++){
        for(j=0;j<c2;j++)
        printf("%d ",b[i][j]);
    }
    if(c1==r2)
    printf("\nMatrix multiplication is possible.....\n");
    else
    return 0;

    for(i=0;i<r2;i++){
        sum=0;
        for(j=0;j<c2;j++)
        sum+=a[i][j]*b[j][i];
        c[i][j]=sum;
    }
    printf("\nProduct of matrices is:\n");
    for(i=0;i<r1;i++){
        for(j=0;j<c2;j++)
        printf("%d ",c[i][j]);
        printf("\n");
    }

    return 0;
}

注意:我的程序可能不正确,我要做的就是运行程序,然后我会调试它。

标签: cwindowsruntime-errorcodeblocks

解决方案


尝试编译clang -Weverything -Wno-vla

c.c:17:20: warning: format specifies type 'int *' but the argument has type 'int' [-Wformat]
        scanf("%d",b[i][j]);
               ~~  ^~~~~~~
c.c:4:27: warning: variable 'c1' is uninitialized when used here [-Wuninitialized]
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
                          ^~
c.c:4:17: note: initialize the variable 'c1' to silence this warning
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
                ^
                 = 0
c.c:4:23: warning: variable 'r1' is uninitialized when used here [-Wuninitialized]
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
                      ^~
c.c:4:11: note: initialize the variable 'r1' to silence this warning
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
          ^
           = 0
c.c:4:37: warning: variable 'c2' is uninitialized when used here [-Wuninitialized]
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
                                    ^~
c.c:4:20: note: initialize the variable 'c2' to silence this warning
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
                   ^
                    = 0
c.c:4:33: warning: variable 'r2' is uninitialized when used here [-Wuninitialized]
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
                                ^~
c.c:4:14: note: initialize the variable 'r2' to silence this warning
    int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;
             ^
              = 0

您使用垃圾值大小初始化所有矩阵,因为您 1. 没有初始化变量和 2. 在同一行声明 VLA==> 导致垃圾大小。

首先从用户那里读取值,然后声明一个 VLA。(虽然使用mallocand Co. 会更好)。


推荐阅读