2-d整数C数组上的奇怪值

时间:2016-10-18 05:16:23

标签: c arrays multidimensional-array initialization

我知道这可能是一个非常简单的修复,但我花了一个小时谷歌搜索并试图修复它无济于事。这是main开头的代码。没有别的操作graph [] []数组。它非常简单的C代码。我试图初始化一个2-d整数数组,并将所有值设置为0.但后来的值最终成为奇怪的随机数。我知道当你没有初始化每个值时会发生这种情况。但我是,我跑过GDB并确认它通过我的测试4X4阵列并将所有内容初始化为0.我很难过。

printgrapharray 只是一个双循环来遍历每个插槽......

代码:

#include <stdio.h>

#define inputarraylength 200
#define MAXVERTICES 100

void printgrapharray(int graph[][MAXVERTICES], int vertamount);

int main(int argc, char* argv[])
{

    int numvert = 1;
    char edges[inputarraylength];
    char vertices[inputarraylength];

    freopen("input.txt", "r", stdin);

    scanf("V={%[^}]s", vertices);

    printf("\nVERTICES\n");
    printf("%s\n", vertices);            //comma-seperated list of names

    for (int i = 0; i < inputarraylength; i++) {

        if (vertices[i] == ','){

            numvert++;                          //get number of vertices
        }
    }
    const char *verts[numvert];         //create vertice array

    printf("numvert: %d\n", numvert);

    int graph[numvert][numvert];                    //create n*n matrix array

    for (int k = 0; k < numvert; k++) {
        for (int z = 0; z < numvert; z++) {

            graph[k][z] = 0;                            //init the graph 2-d array slots to 0
        }
    }
    printgrapharray(graph, numvert);
}

输出:

VERTICES
Aa, Bbb, Cccc, Ddddd
numvert: 4

ADJACENCY MATRIX!
0 0 0 0 
0 0 0 0 
1562140139 32767 1562140159 32767 
774977075 1163132977 1398754642 1230197573 

1 个答案:

答案 0 :(得分:3)

您声明printgrapharray函数

void printgrapharray(int graph[][MAXVERTICES], int vertamount);

表示参数graph是指向MAXVERTICES整数数组的指针。

当你调用函数时,你将main局部变量graph传递给它,它将衰减为指向numgraph整数数组的指针。除非MAXVERTICESnumgraph相等,否则您的类型不匹配,这将导致未定义的行为

这个问题是编译器应该检测到的,并且给你一个警告。

实际上有一个简单的解决方案,因为C具有可变长度数组:在vertamount参数的声明中使用参数graph

void printgrapharray(int vertamount, int graph[][vertamount]);

请注意,必须切换参数的顺序,因为vertamount必须在使用之前声明。