c - 为什么这个代码块显示堆栈粉碎检测?

标签 c

所以我无法运行下面附加的代码。该程序是关于两个矩阵的乘法。我正在检测堆栈崩溃。我是这个问题的新手。我的操作系统是 Ubuntu 18.04

    #include<stdio.h>
#define R1 3
#define C1 4
#define R2 C1
#define C2 2
void main()
{
        int i,j,k,mat1[R1][C1],mat2[R2][C2],mat3[R1][C2];
        printf("Enter 1st matrix(%dX%d) :",R1,C1);
        for(i=0;i<R1;i++)
        {
                for(j=0;j<C1;j++)
                {
                        scanf("%d",&mat1[R1][C2]);
                }
        }
        printf("Enter 2nd matrix(%dX%d) :",R2,C2);
        for(i=0;i<R2;i++)
        {
                for(j=0;j<C2;j++)
                {
                        scanf("%d",&mat1[R1][C2]);
                }
        }
        for(i=0;i<R1;i++)
        {
                for(j=0;j<C2;j++)
                {
                         mat3[i][j]=0;
                        for(k=0;k<C1;k++)
                        {
                                mat3[i][j] += mat1[i][k] * mat2[k][j];
                        }
                }
        }
        printf("The resultant matrices are :");
        for(i=0;i<R1;i++)
        {
                for(j=0;j<C2;j++)
                {
                        printf("%5d",mat3[i][j]);
                }
                printf("\n");

        }
}

最佳答案

   for(i=0;i<R1;i++)
   {
           for(j=0;j<C1;j++)
           {
                   scanf("%d",&mat1[R1][C2]);
           }
   }
   printf("Enter 2nd matrix(%dX%d) :",R2,C2);
   for(i=0;i<R2;i++)
   {
           for(j=0;j<C2;j++)
           {
                   scanf("%d",&mat1[R1][C2]);
           }
   }

你没有设置你想要的索引和矩阵,必须是

    for(i=0;i<R1;i++)
    {
            for(j=0;j<C1;j++)
            {
                    scanf("%d",&mat1[i][j]); /* correct indexes */
            }
    }
    printf("Enter 2nd matrix(%dX%d) :",R2,C2);
    for(i=0;i<R2;i++)
    {
            for(j=0;j<C2;j++)
            {
                    scanf("%d",&mat2[i][j]); /* correct matrix and indexes */
            }
    }

我还鼓励您验证您的 scanf 返回 1 以检查是否使用输入有效的输入

关于c - 为什么这个代码块显示堆栈粉碎检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56313665/

相关文章:

c - C 中的一个程序,用于获取前两个小于给定数字的斐波那契数

c++ - 如何在 C 中将多字符常量转换为整数?

c++ - 使用 ShellExecuteEx 并捕获标准输入/输出/错误

c - 获取输入并拆分为重复的标记

python - 基于 C 退出代码捕获 ctypes 中的异常

c - SDL_Event,队列填充太快

c - 二维数组的堆缓冲区溢出

c - 在 C 的 OSX 上传递相对路径

c - if 语句不打印数据,除非它被排序

c - 为什么海湾合作委员会不喜欢这样?