矩阵乘以**指针给出错误的输出

时间:2017-02-02 17:59:17

标签: c matrix

 int main()
{
int n = 0;
int i = 0;
int j = 0;
int k = 0;
int **x;
int **y;
int **z;


printf("Enter size of matrix - (N x N):");
scanf("%d", &n);

x = malloc(n * sizeof(int *));
y = malloc(n * sizeof(int *));
z = malloc(n * sizeof(int *));  


for(i = 0; i < n; i++)
{
    x[i] = malloc(n * sizeof(int));
    y[i] = malloc(n * sizeof(int));
    z[i] = malloc(n * sizeof(int));
}


for(i = 0; i < n; i++)
{
    for(j = 0; j < n; j++)
    {
        x[i][j] = (rand()% 10) + 1;
        y[i][j] = (rand()% 10) + 1;
    }
}


for(i = 0; i < n; i++)
{
    printf("\n");
    for(j = 0; j < n; j++)
    {
        printf("%2d ", x[i][j]);
        printf("%2d ", y[i][j]);
    }
}


for(i = 0; i < n; i++)
{
    printf("\n\n");
    for(j = 0; j < n; j++)
    {
        for(k = 0; k < n; k++)
        {
            z[i][j] += x[i][k] * y[k][j];
        }
    printf("%2d ", z[i][j]);
    }
}
}

所以我试图进行矩阵乘法,其中2个矩阵总是2x2或3x3等。我想用随机值填充2个矩阵并进行乘法运算。我的问题是我存储答案的第三个矩阵产生了错误的值。例如,我的前两个matricies(2x2)保持值[4,7,4,6​​]和[8,6,7,3],我的输出是[76,48,70,45]真的它应该是[81,45,74,42]。不知道出了什么问题?

1 个答案:

答案 0 :(得分:2)

使用malloc()分配内存时,您获得的空间不会自动初始化。它可以包含任何值。您可以使用随机值填充xy矩阵,但使用z的元素,就像它们来自malloc()一样。您希望在乘法的主要部分之前将它们设置为零。您可以通过首先使用calloc()分配它们来实现,或者您可以在设置初始xy值的同一循环嵌套中将它们设置为零。 / p>