gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:07:09 24 4
gpt4 key购买 nike

 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com