我正在编写此简单代码,用于自己设置矩阵并显示它。当我执行该程序时,它在第一行给出垃圾值。那个怎么样?我的程序有任何错误吗?

#include<iostream>
using namespace std;

void setOneMatrix();
//void getOneMatrix(int mat[6][5]);
int display(int mat[6][5]);

int main() {

int setMat[6][5]={};
setOneMatrix();
display(setMat);


}

void setOneMatrix() {
/*int setMat[6][5] = {1,2,3,4,5,
                    6,7,8,9,10,
                    11,12,13,14,15,
                    16,17,18,19,20,
                    21,22,23,24,25,
                    26,27,28,29,30};*/

int setMat[6][5] = {{1,2,3,4,5},
                    {6,7,8,9,10},
                    {11,12,13,14,15},
                    {16,17,18,19,20},
                    {21,22,23,24,25},
                    {26,27,28,29,30}};

}

int display(int mat[6][5]) {
int i,j,setMat[6][5];
for(i=0;i<6;i++){
    for(j=0;j<5;j++) {
        cout << setMat[i][j] << "\t";
    }
    cout << endl;
}
}


输出:

4665744 4687848 6946296 4257625 0
1   2   3   4   5
6   7   8   9   10
11  12  13  14  15
16  17  18  19  20
21  22  23  24  25

最佳答案

不好意思地说,但是您的整个程序都有未定义的行为!这是我的输出:

-858993460      -858993460      -858993460      -858993460      -858993460
-858993460      -858993460      -858993460      -858993460      -858993460
-858993460      -858993460      -858993460      -858993460      -858993460
-858993460      -858993460      -858993460      -858993460      -858993460
-858993460      -858993460      -858993460      -858993460      -858993460
-858993460      -858993460      -858993460      -858993460      -858993460


您很幸运,除了第一行之外,这些数字都已打印出来。那不应该发生的,请看我的输出。



一些事实:


setMat中的main仅包含0
setOneMatrix不会在setMat中初始化main,它只是初始化另一个setMat。此功能基本上不执行任何操作。
displayMath更好一些,因为您将setMat传递给它,但是该函数甚至使用了setMat,它只是创建了另一个数组mat并打印出该数组。该数组未初始化,因此包含垃圾值。

因此,当您打印时,您什么都可以得到!

(它也不返回int,因此程序已经格式错误,为什么要这么做?只需使其返回void。)

10-06 16:01