仅在第一个索引

时间:2015-05-17 20:01:20

标签: c++ pointers

我只是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;
}

1 个答案:

答案 0 :(得分:0)

我无法看到添加方法如何适用于您的 SetOfEdges 类,但一个可能的问题是,如果您正确地将内存分配给F&#39; s边缘变量。如果每次添加新边时都没有为边分配适当的内存,那么指针指向的值也应该存在问题。