c - 矩阵与 **pointer 相乘给出了错误的输出

标签 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 个矩阵并进行乘法运算。我的问题是我存储答案的第三个矩阵产生了错误的值。例如,我的前 2 个矩阵(对于 2x2)包含值 [4、7、4、6] 和 [8、6、7、3],而我的输出是 [76、48、70、45],而实际上它应该是[81, 45, 74, 42]。不知道出了什么问题?

最佳答案

当您使用malloc() 分配内存时,您获得的空间不会自动初始化。它可以包含任何值。你用随机值填充你的 xy 矩阵,但是你使用 z 的元素,就像它们来自 malloc() 。您希望在乘法的主要部分之前将它们设置为零。您可以通过首先使用 calloc() 分配它们来做到这一点,或者您可以在设置初始 xy 值。

关于c - 矩阵与 **pointer 相乘给出了错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42009204/

相关文章:

c - 在C中使用bash系统调用编写进行bash系统调用的C

c - 释放指向指针的指针

c++ - 如何像 C++ 中的函数一样存储参数矩阵

java - 矩阵中的 ArrayIndexOutOfBoundsException

c - 变量的默认状态是什么?

c - 如何在for循环中打印两个字母之间的空格

c - Eclipse CDT 中的方法/函数断点

java - 用Java管理大矩阵的正确方法

java - JAMA:Matrix.times() 与 Matrix.arrayTimes()

java - 矩阵到 JTable