c++指针垃圾值只在第一个索引上

C++ pointer garbage value only on the first index

本文关键字:第一个 索引 指针 c++      更新时间:2023-10-16

我只是一个c++初学者,我在使用指针时遇到了麻烦。我在试着做prim的算法。

跳过索引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;
}

我看不出add方法是如何为您的SetOfEdges类工作的,但一个可能的问题是,如果您正确地将内存分配给F的edges变量。如果每次添加新边时没有为边分配适当的内存,则指针所指向的值也应该存在问题。

相关文章: