c++指针垃圾值只在第一个索引上
C++ pointer garbage value only on the first index
我只是一个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变量。如果每次添加新边时没有为边分配适当的内存,则指针所指向的值也应该存在问题。
相关文章:
- 为什么 Boost multi_index只修改第一个索引的键时对第二个索引进行比较?
- 一个 2D 数组,并按行存储值.第一个循环用于行索引,第二个循环用于列索引
- "如何使用C++将字符串的第一个和最后一个索引返回到向量中?
- 查找数组的第一个和最后一个索引,其中 from 和 to 元素的顺序总和最大
- 数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?
- 如何使用二叉搜索返回姓氏(给定字符串)的第一个索引/出现次数?
- 如何在 for 循环中解决潜在的 getline() 问题,数组的第一个索引没有显示?
- 如何在指针初始化为数组的第一个索引后释放指针
- 尝试将文件读入结构数组,但 for 循环仅显示第一个索引,其余索引显示为零
- 如何使用 Boost V2 1.70 日志记录库在第一个索引(例如 logtrail01.txt)保留最新的日志文件名?
- 如何在具有相同第一个索引 (c++) 的二维矩阵中添加值
- 在C 中返回向量中元素的第一个索引
- 在排序数组 X 中搜索第一个索引 i,使得 X[i] >= a
- 删除字符*[] 中的第一个索引
- 使用分而治之搜索字符串中'xy'的第一个索引
- 结构数组索引 在第一个索引之后未填充
- 在不使用图形的情况下,以最小的乘积从第一个索引到最后一个索引
- QDataWidgetMapper只更新第一个索引到QSqlRelationalTableModel
- 为什么代码打印所有第一个索引
- c++指针垃圾值只在第一个索引上