【发布时间】:2017-03-05 13:14:00
【问题描述】:
下面的代码应该读取一个图中的多个节点,然后在动态分配的相邻节点列表中引入一定数量的边。由于某种原因,当在read_graf() 中调用add_edge() 函数时程序停止,并且IDE(又名cb)打开stl_list 的主文件。谁能指出问题?谢谢!
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<list>
#define grafMAX 101
FILE *fin = fopen("grafin.txt","r");
FILE *fout = fopen("grafout.txt","w");
struct Graf{
int nrV;
std::list <int> *ad;
};
void init_graf(Graf g, int nr){
g.nrV = nr;
g.ad = new std::list <int> [g.nrV];//(std::list <int> *)malloc(g.nrV * sizeof(std::list <int>));
}
void add_edge(Graf g, int n1, int n2){
g.ad[n1].push_back(n2);
g.ad[n2].push_back(n1);
}
inline int min(const int a, const int b){
if(a < b)
return a;
return b;
}
void read_graf(Graf g){
int n,m;
fscanf(fin,"%d%d",&n,&m);
init_graf(g,n);
while(m){
int x,y;
fscanf(fin,"%d%d",&x,&y);
add_edge(g,x,y);
--m;
}
}
这是一个输入:
10 - # of nodes
11 - # of edges to be read
1 2
1 3
1 10
2 4
3 4
3 5
5 6
5 7
6 7
7 8
7 9
【问题讨论】:
-
不确定您的 IDE 的功能,但您是否尝试过一个调试器来进入该特定函数调用?例如,它可能会因空值而崩溃。