gpt4 book ai didi

c++ - 为什么在尝试编写图形时会出现段错误?

转载 作者:行者123 更新时间:2023-12-01 14:48:20 24 4
gpt4 key购买 nike

我的任务是以这种输入格式读取图形:
enter image description here

并以这种格式输出
enter image description here

但是,当我运行我的程序时,我不断收到段错误。我认为我的问题是在编写图表时,但我似乎无法找出原因。有人能指出我正确的方向吗?

更多信息: readGraph 必须使用 insertEdge 插入边。
无论如何,每行读取三个数字很诱人。在最后一行,只会成功读取一个数字。但是程序往往会被修改,并且在工作量不大的地方,为修改做好准备是一个好主意。如果更改程序以便在图形之后有更多输入怎么办?您不希望 readGraph 读入图形之后的内容。

编写 readGraph 使其不依赖于仅包含 0 的行作为输入中的最后一件事。这很容易做到。阅读第一个数字并在阅读接下来的两个数字之前检查它。

 struct Edge
{
int vertex1;
int vertex2;
int weight;

Edge()
{
vertex1 = 0;
vertex2 = 0;
weight = 0;
}
};

struct Graph
{
int numOfVertices;
int numOfEdges;
Edge* edges;
int sizeOfArray;

Graph(int n, int e)
{
numOfVertices = n;
numOfEdges = 0;
sizeOfArray = e;
edges = new Edge[e];
}
};

//Inserts an edge between vertices u and v, of weight w, into graph g.
void insertEdge(int u, int v, int w, Graph* g)
{
Edge e;
e.vertex1 = u;
e.vertex2 = v;
e.weight = w;
g->edges[g->numOfEdges] = e;
g->numOfEdges++;

}

//Reads vertices, edges, and weight from the input
//and allocates a graph in the heap with enough room for e edges.
Graph* readGraph(int e)
{
int numberOfVertices, edge;
scanf("%i", &numberOfVertices);
Graph* g = new Graph(numberOfVertices, e);
int u, v, w;
while(scanf("%i", &edge) != 0)
{

scanf("%i%i%i", &u, &v, &w);
insertEdge(u,v,w,g);
}
return g;
}

//Writes graph g by listing the number of vertices and the number of edges.
void writeGraph(const Graph* g)
{
printf("There are %i vertices and %i edges", g->numOfVertices, g->numOfEdges);
printf("Vertices Weight");
for(int i = 0; i < g->numOfEdges; i++)
{
printf(" %i %i %i", g->edges[i].vertex1, g->edges[i].vertex2, g->edges[i].weight);
}

}

int main()
{

int maxEdges = 1000;
Graph* g = readGraph(maxEdges);
writeGraph(g);
return 0;
}

最佳答案

我看不出你的代码有问题,但也许我瞎了。尽管如此,您可以使用 gdb 进行调试。 15 分钟投入:https://www.youtube.com/watch?v=PorfLSr3DDI

或者你可以使用一些类似 Valgrind 的工具:https://valgrind.org/ ,
https://valgrind.org/docs/manual/quick-start.html

我祝你一切顺利。

关于c++ - 为什么在尝试编写图形时会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60969571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com