gpt4 book ai didi

c - 在 C 中打印矩阵时获取垃圾值

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:40 25 4
gpt4 key购买 nike

我三年前学习了 C 编程语言,现在当我在学习了 java 和 c# 之后重新访问它时,我遇到了一些指针问题。所以我尝试编写一个简单的矩阵加法程序,但我不知道为什么在打印矩阵时会得到一些奇怪的值。

代码:

#include <stdio.h>

int* sumOfMat(int* m1,int* m2)
{
printf("Matrix A: \n");
printMat(m1);
printf("Matrix B: \n");
printMat(m2);
int mat3[3][3];
int row=0,col=0,k=0,sum=0;
for(;row<3;row++)
{
col=0;
for (;col<3 ;col++ )
{
sum=(*m1+*m2);
m1++;
m2++;
mat3[row][col]=sum;
}
}

printf("Result: \n");
// printMat(mat3); //this statement is giving me a correct output.
return mat3;
}

void printMat(const int m[3][3])
{
int row,col;
for (row=0;row<3 ;row++ )
{
for (col=0;col<3 ;col++ )
{
printf("%d\t",m[row][col]);
}
printf("\n");
}

}


int main(void) {
int mat1[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int mat2[3][3]={{1,2,3},{4,5,6},{7,8,9}};
//add
printf("Sum of the metrices : \n");
int* x=sumOfMat(&mat1,&mat2);
printMat(x); // this call is providing me some garbage values at some locations.
return 0;
}

输出:

Success  time: 0 memory: 2292 signal:0
Sum of the metrices :
Matrix A:
1 2 3
4 5 6
7 8 9
Matrix B:
1 2 3
4 5 6
7 8 9
Result:
2 134514448 134514448
8 10 12
14 16 -1216458764

Demo

问题:为什么我会收到此错误以及如何更正它。

最佳答案

这条线

int mat3[3][3];

上分配你的二维数组

您将返回指向此数组的指针。

return mat3;

不幸的是,当函数调用结束时,堆栈被展开并且数组的内存不再存在,所以你有一个指向垃圾的指针。

一种解决方案是在 main 函数中分配数组并将其作为参数传递给 sumOfMat

关于c - 在 C 中打印矩阵时获取垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18856124/

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