c - 矩阵乘积 c,核心转储错误

标签 c matrix product

我尝试创建两个矩阵并在另一个矩阵中进行乘积,但编译器给出错误 core dump 。前两个矩阵的创建是正确的;第三个矩阵有问题。

#include <stdio.h>
#include <stdlib.h>

int main()
{

int m;
int n;
int t;
int i;
int **A;
int **B;
int k;
int j;
scanf("%d",&n);
scanf("%d",&m);
scanf("%d",&t);
A=malloc(n*sizeof(int*));
for(i=0;i<n;i++){
    A[i]=malloc(m*sizeof(int));
            }
            for(i=0;i<n;i++){  // A[n][m]
                for(j=0;j<m;j++)
                    {
                    scanf("%d",&(A[i][j]));
                    }
                }
              B=malloc(t*sizeof(int*));
              for(i=0;i<t;i++) //B[m][t]
                {
                B[i]=malloc(n*sizeof(int));
                }
              for(i=0;i<t;i++){
                for(j=0;j<n;j++)
                    {
                    scanf("%d",&(B[i][j]));
                    }
                            }

                            int **C;


C=malloc(t*sizeof(int*));
for(i=0;i<t;i++){{A[i]=malloc(m*sizeof(int));}


for(i=0;i<t;i++){
    for(j=0;j<m;j++){
    C[i][j]=0;

        for(k=0;k<n;k++)
        {

            (C[i][j])=(C[i][j])+((A[k][j])*(B[i][k]));
        }

    }

}


}


                    return 0;

}

最佳答案

您必须为 C 分离内存,而不是为 A 分离内存。这就是为什么当您尝试访问 C[i][j] 时会生成此错误。变化:

for(i=0;i<t;i++){{A[i]=malloc(m*sizeof(int));}

for(i=0;i<t;i++){ C[i]=malloc(m*sizeof(int));}

完整代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m;
    int n;
    int t;
    int i;
    int **A;
    int **B;
    int k;
    int j;
    scanf("%d",&n);
    scanf("%d",&m);
    scanf("%d",&t);
    A=malloc(n*sizeof(int*));
    for(i=0;i<n;i++){
        A[i]=malloc(m*sizeof(int));
    }

    for(i=0;i<n;i++){  // A[n][m]
        for(j=0;j<m;j++){
            scanf("%d", &(A[i][j]));
        }
    }

    B=malloc(t*sizeof(int*));
    for(i=0;i<t;i++) //B[m][t]
    {
        B[i]=malloc(n*sizeof(int));
    }

    printf("B\n");
    for(i=0;i<t;i++){
        for(j=0;j<n;j++)
        {
            scanf("%d",&(B[i][j]));
        }
    }

    int **C;
    C=malloc(t*sizeof(int*));
    for(i=0;i<t;i++){
        C[i]=malloc(m*sizeof(int));
    }

    for(i=0;i<t;i++){
        for(j=0;j<m;j++){
            C[i][j]=0;
            for(k=0;k<n;k++)
            {

                (C[i][j])=(C[i][j])+((A[k][j])*(B[i][k]));
            }
        }
    }

    return 0;
}

关于c - 矩阵乘积 c,核心转储错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41475819/

相关文章:

php - 在 Woocommerce 中的简短描述后移动产品描述

validation - 如何禁用无效身份验证的产品?

c - 这个过滤器实现是否产生正确的输出?

c - 子函数中的指针和赋值

c - 根据循环中的条件应用表达式

c++ - 使用 fgets() 时出错

loops - 使用 Stata 中变量的唯一观测值创建向量

java - 将行追加到矩阵的最佳方法是什么?

matlab - 以更有效的方式生成矩阵

php - 将多个产品添加到购物车(如果它们尚未在购物车中)