【问题标题】:Bug passing variables by reference通过引用传递变量的错误
【发布时间】:2015-05-23 18:10:39
【问题描述】:

我有一个相当简单的问题。我用 C 语言编写了一个计算机代码,它以邻接矩阵的形式得到一个图形,其中图形中的每条边都有一个与之关联的数字,如果你愿意的话,还有一个权重。

如果边的权重为 0,则该边不存在。例如,如果邻接矩阵中的条目 (1,2) 为 0,则我们知道顶点 1 未连接到顶点 2。

到目前为止一切顺利。我的问题是我试图计算有多少边,我得到了一个意想不到的值。

int **get_adjacency_matrix(int* num_of_vertices,int *num_of_edges)
{
    int i,j,k,**graph,rows=0;
    printf("Enter the number of vertices in your connected undirected graph:");
    scanf("%d",num_of_vertices);
    printf("\nVery important: I assume there are no parallel edges\n");
    rows=*num_of_vertices;
    graph=(int**)malloc(rows*sizeof(int*));
    for(i=0;i<rows;i++)
        graph[i]=(int*)malloc((rows-i)*sizeof(int));
    printf("Please Enter the upper triangular cost-adjacency matrix\n");
    for(i=0;i<rows;i++)
    {
        for(k=0;k<i;k++)
            printf("  "); //blank spaces for readability.
        for(j=0;j<rows-i;j++)
        {
            scanf("%d",&(graph[i][j]));
            if(graph[i][j]>0)
                (*num_of_edges)++; //edge found
        }
    }
    printf("*num_of_edges = %d",*num_of_edges);
    return graph;
}

这段代码确实打印了正确的结果。但在我的 void main 我写了

void main()
{
    int **graph,num_of_vertices=0,num_of_edges=0,k;
    edge *edges_array;
    graph=get_adjacency_matrix(&num_of_vertices,&num_of_edges);
    printf("there are % edges.\n",num_of_edges);
}

那一行打印垃圾。奇怪的是,num_of_vertices 变量工作正常。

所以在 **get_adjacency_matrix 程序中,我的 num_of_edges 得到了正确的值,但它返回了错误的值给 void main。

为什么?

【问题讨论】:

  • 顺便说一句 void main() 不好;请改用int main(void)
  • printf("there are % edges.\n",num_of_edges); 的格式说明符有误,应为 %d
  • 天哪……错过了真是太糟糕了。
  • 我认为,大多数严格设置的编译器都会接受这一点。

标签: c graph reference


【解决方案1】:

EDIT修改了之前的答案。

声明

printf("there are % edges.\n",num_of_edges);

格式说明符有误,应为%d

【讨论】:

  • graph 是 get_adjacency 中的局部变量,但我返回了它,因此如果您将在 main 中的 graph 变量中“保存”它。无论如何,我的问题不在于图表,而在于 num_of_edges
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多