我知道这可能是一个非常简单的修复,但我花了一个小时谷歌搜索并试图修复它无济于事。这是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
答案 0 :(得分:3)
您声明printgrapharray
函数
void printgrapharray(int graph[][MAXVERTICES], int vertamount);
表示参数graph
是指向MAXVERTICES
整数数组的指针。
当你调用函数时,你将main
局部变量graph
传递给它,它将衰减为指向numgraph
整数数组的指针。除非MAXVERTICES
和numgraph
相等,否则您的类型不匹配,这将导致未定义的行为。
这个问题是编译器应该检测到的,并且给你一个警告。
实际上有一个简单的解决方案,因为C具有可变长度数组:在vertamount
参数的声明中使用参数graph
:
void printgrapharray(int vertamount, int graph[][vertamount]);
请注意,必须切换参数的顺序,因为vertamount
必须在使用之前声明。