我收到一个错误 "a problem caused the program to stop working correctly.Windows will close the program and notify you if a solution is found"

I get an error "a problem caused the program to stop working correctly.Windows will close the program and notify you if a solution is found"

我编写了一个基于两个 matrices.When 的产品的 c 程序,我编译时没有发现错误,但是当我 运行 时,我发现上述 error.I 已经尝试了多种解决方案youtube 建议 videos.But nothing worked.I 在我的 pc.I 运行 codeblocks 20.03[=18= 上的程序上安装了盗版 windows 10 个副本] 这是程序:

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

注意:我的程序可能不正确,我只想运行程序和上面的字母我会调试它

你的主要问题在

  int r1,r2,c1,c2,a[r1][c1],b[r2][c2],c[r1][c2],sum=0;

r1r2c1c2 的值不确定(即未初始化或分配)时,您使用它们的地方。您应该会看到一些编译器警告,类似于

warning: ‘r1’ is used uninitialized in this function [-Wuninitialized]
warning: ‘c2’ is used uninitialized in this function [-Wuninitialized]
warning: ‘r2’ is used uninitialized in this function [-Wuninitialized]

如果您没有看到它们,请使用您的编译器标志来启用警告。

要解决这个问题:您需要先扫描值,然后将它们用作数组维度。

那么,下一个问题:你打错了

 scanf("%d",b[i][j]);

应该是

 scanf("%d", &b[i][j]);
            ^^

也就是说,在使用扫描值之前,请始终检查 scanf() 的 return 值以确保扫描成功。

尝试使用 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。 (尽管使用 malloc 和 Co. 会更好)。