我只是C ++的初学者,而且我在使用指针时遇到了麻烦。我正试图制作原始算法。
跳过索引0,我有索引1~4个指针实例。 4指针值在方法中打印出来就好了。 但是,当我从main打印它们时,索引1的值有垃圾而索引2的值很好。
正确的值是:
(v2, v1)
(v4, v2)
(v5, v2)
(v3, v5)
然而,它出现了这样:
(v1606413560, v32767)
(v4, v2)
(v5, v2)
(v3, v5)
如果我从索引2中取出我的值,并从索引2打印指针,它们就会很好。启动有什么问题吗?
我尝试启动所有指针和变量,但仍然没有解决它。
这些是定义的类:
class Edge
{
public:
int Vi=0, Vj=0;
Edge(int vi, int vj)
{
Vi=vi;
Vj=vj;
}
Edge()
{
}
};
class SetOfEdges
{
public:
int numOfedge=0;
Edge* edges;
SetOfEdges prim(int n, int** W);
void add(Edge e);
SetOfEdges()
{
}
};
打印值正确的方法:
SetOfEdges SetOfEdges::prim(int n, int** W)
{
int i, Vnear=0, min;
Edge e;
SetOfEdges F = SetOfEdges();
some codes...
e = Edge(Vnear,nearest[Vnear]);
cout<<"(v"<<Vnear <<",v"<<nearest[Vnear]<<") ";
F.add(e);
打印垃圾值的main():
SetOfEdges soe = SetOfEdges();
soe = soe.prim(numOfnode, W);
cout <<"\n";
for(int i=1; i<=soe.numOfedge;i++)
{
cout <<"(v"<<soe.edges[i].Vi;
cout <<", v"<<soe.edges[i].Vj<<")\n";
}
添加方法:
void SetOfEdges::add(Edge e){
edges[++numOfedge]=e;
}
答案 0 :(得分:0)
我无法看到添加方法如何适用于您的 SetOfEdges 类,但一个可能的问题是,如果您正确地将内存分配给F&#39; s边缘变量。如果每次添加新边时都没有为边分配适当的内存,那么指针指向的值也应该存在问题。