C ++多维数组程序在输出中显示垃圾值

时间:2016-07-10 03:25:26

标签: c++ arrays multidimensional-array garbage

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

#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

3 个答案:

答案 0 :(得分:2)

很抱歉这么说,但你的整个程序有不明确的行为!这是我的输出:

int main()
{
  path_data my_path[41];
  enemy_data_array enemies;
  enemies.size = 0;
  add_enemy(&enemies);
}

除了第一行之外,你很幸运地打印了这些数字。这应该不会发生,请参阅我的输出。

一些事实:

    {li} -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。)

答案 1 :(得分:1)

您的代码中存在一些错误。
1.“显示”功能必须返回一个值。你错过了。而不是返回一个值,只需将其更改为“void”函数。
2.在函数setOneMatrix()中重新定义矩阵“setMat”。这意味着main()中的矩阵“setMat”和函数setOneMatrix()中的矩阵“setMat”在计算机内存中的地址不同。当您尝试打印矩阵时,只需在main()中打印矩阵即可。而它的元素的价值就是垃圾。

答案 2 :(得分:0)

下面, 我更正了你的代码

#include<iostream>
using namespace std;


int mat[6][5]; //Global variable, you can access this anywhere in your program

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

int main() {
    init_mat(); /* Init mat array */
    setOneMatrix();

    display(mat);//Pass array that is global as argument


}

void init_mat()
{
    //Give fields in array default value
    //Easyer to do field by field
    for (int i = 0; i < 6; i++)
        for (int j = 0; j < 5; j++)
            mat[i][j] = 0;
}
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 } };*/

    //Now you need to set value of fields field by field, 
    for (int i = 0; i < 6; i++)
        for (int j = 0; j < 5; j++)
            mat[i][j] = 1+i*5+j;
}

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